0

코드를 생성하기 위해 일부 주석 처리가 필요한 라이브러리를 구축 중입니다. 나는 이제 릴리즈 빌드가 디버그 빌드가하는만큼 코드를 가질 필요가 없다는 문제에 봉착한다. (이것은 주로 테스트 목적으로 사용되는 구성 변형을 수정하기위한 라이브러리이기 때문에). 다음 코드는 상황을 설명합니다. 주석이 달린 클래스와 속성에서 클래스 ConfigManager를 만들고 싶다고 가정 해 봅시다. 디버그 빌드에서, 나는이 많이 필요합니다 : 릴리스 빌드에서Android annotation processing - 다른 빌드 플레어에 대해 다른 코드 생성

public class ConfigManager { 
    public Class getConfigClass() { 
     return abc.class; 
    } 
    public void method1() { 
     doSomething1(); 
    } 
    public void method2() { 
     doSomething2(); 
    } 
    public void method3() { 
     doSomething3(); 
    } 
} 

동안, 나는 단지이 많이 필요합니다

public class ConfigManager { 
    public Class getConfigClass() { 
     return abc.class; 
    } 
} 

내가 가지고 그것을 확인하는 Gradle을 플러그인을 작성하여 가능하다 느낌 컴파일 타임에 풍미를 쌓고 다른 프로세서를 호출하거나 또는 어떻게 든 다른 코드를 생성하기 위해 프로세서에 매개 변수를 전달합니다. 그러나이 주제는 나에게 꽤 새로운 것이므로이를 달성하는 방법을 모르겠습니다. 인터넷 검색의 몇 시간도 도움이되지 못했습니다. 그래서 누군가 나에게 방향이나 모범을 줄 수 있는지 궁금합니다. 감사합니다

답변

1

옵션 (release = true/false)을 프로세서에 전달하십시오.

-Akeyhttps://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html

javac의 에서 [= 값] 은 주석 프로세서로 전달하는 옵션을 지정. 이러한 옵션은 javac에 의해 직접 해석되지는 않지만 개별 프로세서에서 사용할 수있게됩니다. 키 값은 점 (.)으로 구분 된 하나 이상의 식별자 여야합니다. Processor.html 번호의 getSupportedOptionshttps://docs.oracle.com/javase/8/docs/api/javax/annotation/processing/Processor.html#getSupportedOptions

와 함께

이 프로세서가 인식하는 옵션을 돌려줍니다. 처리 도구의 구현은 도구 자체에 전달 된 옵션과 프로세서 고유의 옵션을 명확하게 전달하는 방법을 제공해야합니다 (getOptions 참조).

구현 개요 :

public Set<String> getSupportedOptions() { 
    Set<String> set = new HashSet<>(); 
    set.add("release"); 
    return set; 
    } 

    // -Arelease=true 
    boolean isRelease(ProcessingEnvironment env) { 
    return Boolean.parseBoolean(env.getOptions().get("release")); 
    } 

가 Gradle을 빌드에서 옵션을 전달하는 방법에 대한 Pass options to JPAAnnotationProcessor from Gradle를 참조하십시오.

+0

끝내 주셔서 감사합니다! 나는 지금 일하고있다. 동일한 문제를 겪고있는 사람들을 위해, andbutton (https://bitbucket.org/hvisser/android-apt) 플러그인 페이지가 도움이 될 것입니다. 또한 android 사용에 대한 추가 정보를 제공합니다. –