0

コードを生成するために注釈処理が必要なライブラリを構築しています。私は今、リリースビルドは、デバッグビルドと同じくらいのコードを持つ必要はないという問題にぶつかります(これは、主にテスト目的で使用される構成バリアントを変更するためのライブラリです)。次のコードは状況を示しています。注釈付きのクラスとプロパティからクラスConfigManagerを作成したいとしましょう。デバッグビルドで、私はずっとこれを必要とする:Androidアノテーション処理 - 異なるビルドフレーバに異なるコードを生成する

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

プロセッサにオプション(リリース= true/false)を渡します。

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

のjavacから[=値] は、注釈プロセッサに渡すオプションを指定します。これらのオプションは、javacによって直接解釈されるのではなく、個々のプロセッサで使用できるようになっています。キー値は、ドット(。)で区切られた1つ以上の識別子でなければなりません。 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

素晴らしい感謝!私は今働いている。同じ問題に直面している人のために、android-aptプラグインのBitbucketページ(https://bitbucket.org/hvisser/android-apt)が参考になるかもしれません。また、androidの使用に関する追加情報も提供しています –

関連する問題