在Gradle中,如何根據其他構建配置字段創建布爾構建配置字段?在Gradle中,是否可以根據其他構建配置字段創建布爾構建配置字段?
例如:
buildConfigField BOOLEAN, TEST_A, "false"
buildConfigField BOOLEAN, TEST_B, "false"
buildConfigField BOOLEAN, TEST_C, TEST_A && TEST_B
在Gradle中,如何根據其他構建配置字段創建布爾構建配置字段?在Gradle中,是否可以根據其他構建配置字段創建布爾構建配置字段?
例如:
buildConfigField BOOLEAN, TEST_A, "false"
buildConfigField BOOLEAN, TEST_B, "false"
buildConfigField BOOLEAN, TEST_C, TEST_A && TEST_B
這不是很漂亮,但這樣的事情爲我工作:
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
}
}
當你建立你應該Android Studio中的gradle這個控制檯中看到這個項目:
A的值:false
B的值:false
值AandB的:C假
值:false
我相信這在所有工作是因爲defaultConfig配置閉合這裏裏面的東西被委託給ProductFlavor的實例延伸DefaultProductFlavor延伸的原因BaseConfigImpl包含公共方法「getBuildConfigFields」。
但是,我沒有看到「getBuildConfigFields」正式記錄爲ProductFlavor上的一種方法,我擔心它可能無法始終供我們使用。
還要注意buildConfigFields.get()給你ClassField的一個實例:
public interface ClassField {
@NonNull
String getType();
@NonNull
String getName();
@NonNull
String getValue();
@NonNull
String getDocumentation();
@NonNull
Set<String> getAnnotations();
}
因此需要得到它的價值和轉換從字符串通過調用通過Boolean.valueOf爲布爾值()。
此代碼,您android.defaultConfig
塊內寫的,正是這麼做的:
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
,您可以看到在特定的構建版本中聲明的字段e(例如android.buildTypes.debug
)出現在默認配置中聲明的字段之前。
在例子中提供的,如果你想TEST_C
依賴於實際的構建類型,你需要在構建類型級別聲明TEST_A
和TEST_B
,而不是在默認級別。