1

저는 Android 프로젝트 용 주석 프로세서를 작성 중이며 상황이 발생했습니다. 라이브러리 모듈의 주석이 달린 클래스를 처리하고 싶습니다. 즉, app 모듈은 라이브러리 모듈에 의존하며 라이브러리 모듈의 주석이 달린 클래스를 처리해야합니다.주석 처리 타사 라이브러리

그러나 주석 처리기는 코드가 이미 컴파일 되었기 때문에 종속성에서 주석을 "볼"수 없습니다. 다른 라이브러리에 대한 문제는 here을 참조하십시오. 내 프로젝트의 문제에 대한 시연은 지점 here에 있습니다. sample 모듈의 주석은 처리되지만 lib 모듈의 주석은 처리되지 않습니다.

이것은 모두 훌륭하지만이 기능이 없으면 살기 위해 사임했지만 안드로이드 데이터 바인딩 라이브러리는 모듈 및 타사 라이브러리의 주석을 처리 할 수 ​​있습니다. 예를 들어 This 라이브러리는 응용 프로그램에서 잘 처리되는 @BindingAdapter 메서드를 제공합니다.

나는 아무 소용이없는 주석에 보존 유형을 설정하여 놀았습니다. 내가 볼 수있는 중요한 차이점은 데이터 바인딩 프로세서는 메서드가 클래스 (유형)를 대상으로하는 동안 메서드를 대상으로하지만 프로세서와 차이가 있다고 생각하지 않는다는 것입니다. 그래서 나는 데이터 바인딩 프로세서가 안드로이드 플러그인의 일부가 될지도 모른다고 생각하고 있지만, 어떻게 도움이 될지 모르겠습니다.

누구나 알 수 있습니다.

+0

질문에 약간 혼란 스럽습니다. 원하는 것을 할 수없는 예를 제공 할 수 있습니까? 보존 정책이 Runtime 인 한, 컴파일 된 것이 든 아니든, 내가 아는 한 중요하지 않습니다. –

+0

필자는 런타임 프로세서 주석에 대해서는 중요하지 않지만 성능상의 이유로 Android에서 일반적으로 사용되는 패턴 인 컴파일 타임 프로세서 주석에 대해서는이를 이해하고 있습니다. 지금 예제 프로젝트를 만들지는 않았지만 참조한 프로젝트에서 참조한 ClassIndex 프로젝트를 포함하여 참조 된 문제에서 언급 한 문제를 설명해야합니다. –

+0

"* 주석 처리기는 종속성에서 주석을"볼 "수 없습니다. 아마도 코드가 이미 컴파일 되었기 때문일 것입니다. *"- 우리가 준 링크의 응답은 "* 사용자 정의 프로세서는 * "당신이 답장을 읽지 않은 것처럼 보입니다. 그것은 당신의 문제를 해결할 수있는 정보를 포함 할 수 있습니다. –

답변

2

Android 데이터 바인딩은 종속성에 대한 주석도 처리 할 수 ​​없습니다. 대신 라이브러리의 컴파일시 라이브러리를 처리하고 아카이브의 일부로 중간 파일 (예 : jar 파일)에 정보를 저장합니다. 그런 다음 주석을 읽는 대신 종속 파일에서 중간 파일 정보를로드합니다.

중간 정보를 jar 파일 종속성의 리소스로 저장하면 jar 파일에서 중간 정보를 매우 쉽게 가져올 수 있습니다. 올바르게 호출했다면 클래스 경로에 있어야하며 ClassLoader의 getResource() 메소드를 사용할 수 있습니다. jar 파일을 사용하여 중간 파일 정보를 더 이상 저장하지 않으므로 내 메모리가 조금 오래 걸릴 수 있습니다.

+0

나는 그것에 대해서도 생각했다. 그러나 데이터 바인딩 생성 된 파일은 컴파일시에 플러그인에 의해 쓰여졌다. 그래서 (의존성으로부터의) 리소스 파일은 플러그인에 의해 읽혀질 필요가있다. 생성 된 파일. 따라서 빌드 타임에 종속성의 자산을 플러그인에서 사용할 수 있다는 것을 의미합니까? 내가 그렇게 생각하지 않았을거야. –

+0

예, 빌드시 응용 프로그램에 자산을 사용할 수 있습니다. 모든 리소스는 응용 프로그램에서 액세스 할 수 있도록 병합되어야합니다. –