[英]Android annotation processing - generate different code for different build flavor
我正在建立一個需要一些注釋處理才能生成代碼的庫。 我現在遇到一個問題,即發行版本不需要像調試版本那樣具有那么多的代碼(因為這是一個用於修改配置變量的庫,主要用於測試目的)。 以下代碼說明了這種情況。 假設我想從一些帶注釋的類和屬性創建一個類ConfigManager。 在調試版本中,我非常需要:
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插件在編譯時檢查構建風格並調用不同的處理器/或以某種方式將參數傳遞給處理器以生成不同的代碼來實現。 但是,這個主題對我來說還很陌生,所以我不確定如何實現。 幾個小時的谷歌搜索也沒有幫助。 所以我想知道是否有人可以給我一個方向或例子? 謝謝
將選項(release = true / false)傳遞給處理器。
從javac https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html
-Akey [= value]指定要傳遞給注釋處理器的選項。 這些選項不是由javac直接解釋的,而是可供單個處理器使用的。 鍵值應該是一個或多個用點(。)分隔的標識符。
結合Processor.html#getSupportedOptions https://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將選項傳遞給JPAAnnotationProcessor,以了解如何在gradle構建中傳遞選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.