2017-05-24 15 views
2

Gradleでは、他のビルド設定フィールドに基づいてbooleanビルド設定フィールドを作成するにはどうすればよいですか?例えばGradleでは、他のビルド設定フィールドに基づいてboolean build configフィールドを作成できますか?

:あなたはアンドロイドStudioのGradleのコンソールでこれを見るべきプロジェクトをビルドする

android { 

    ... 

    defaultConfig { 

     ... 

     buildConfigField "boolean", "A", "false" 
     buildConfigField "boolean", "B", "false" 
     println "value of A:" + buildConfigFields.get("A").value 
     println "value of B:" + buildConfigFields.get("B").value 

     boolean AandB = Boolean.valueOf(buildConfigFields.get("A").value) && Boolean.valueOf(buildConfigFields.get("B").value) 
     println "value of AandB:" + AandB 

     buildConfigField "boolean", "C", String.valueOf(AandB); 
     println "value of C:" + buildConfigFields.get("C").value 
    } 
} 

buildConfigField BOOLEAN, TEST_A, "false" 
buildConfigField BOOLEAN, TEST_B, "false" 
buildConfigField BOOLEAN, TEST_C, TEST_A && TEST_B 

答えて

2

それはかなりありませんが、この種のものは、私のために働いた

の値A:false
Bの値:falseAandBの 値:Cの偽
値:falseを

私はdefaultConfig構成クロージャ内のものがここに拡張しDefaultProductFlavorを拡張ProductFlavorのインスタンスに委任されますので、これはすべてで働く理由があると信じてpublicメソッド "getBuildConfigFields"を含むBaseConfigImpl。

しかし、「getBuildConfigFields」がProductFlavorのメソッドとして正式に文書化されているとは限りません。いつも私たちが利用できるとは限りません。 )(Boolean.valueOfを呼び出すことにより、ブールにStringからその値を取得して変換する必要が故に

public interface ClassField { 
    @NonNull 
    String getType(); 

    @NonNull 
    String getName(); 

    @NonNull 
    String getValue(); 

    @NonNull 
    String getDocumentation(); 

    @NonNull 
    Set<String> getAnnotations(); 
} 

もbuildConfigFields.getは()あなたのClassFieldのインスタンスを与えることに注意してください。あなたandroid.defaultConfigブロック内に記述

2

このコード、まさにそのん:

buildConfigField("boolean", "TEST_A", "false"); 
    buildConfigField("boolean", "TEST_B", "false"); 
    buildConfigField("boolean", "TEST_C", "TEST_A && TEST_B"); 

これはあなたのBuildConfig.javaの次の行になり:

public static final boolean TEST_A = false; 
    public static final boolean TEST_B = false; 
    public static final boolean TEST_C = TEST_A && TEST_B; 

一つ注意す興味深いですこのようにビルド設定値を宣言すると、BuildConfig.javaの構造を見ると、特定のビルドtypで宣言されたフィールドe(例えば、 android.buildTypes.debug)は、デフォルトの設定で宣言されたフィールドの前に表示されます。

あなたはTEST_Cは、実際のビルドの種類に依存することにしたいのであれば提供された例では、あなたがいないデフォルトのレベルで、ビルドタイプレベルでTEST_ATEST_Bを宣言する必要があります。

関連する問題