簡體   English   中英

Android批注處理-為不同的構建風格生成不同的代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM