在Gradle中,如何根据其他构建配置字段创建一个布尔构建配置字段?
例如:
buildConfigField BOOLEAN, TEST_A, "false"
buildConfigField BOOLEAN, TEST_B, "false"
buildConfigField BOOLEAN, TEST_C, TEST_A && TEST_B
答案 0 :(得分:7)
此代码写在您的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
的结构,你可以看到在特定构建类型中声明的字段(例如android.buildTypes.debug
)出现在默认配置中声明的字段之前。
因此,在提供的示例中,如果您希望TEST_C
依赖于实际构建类型,则需要在构建类型级别声明TEST_A
和TEST_B
,而不是默认级别。
答案 1 :(得分:2)
它并不漂亮,但这种方式对我有用:
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的值:假
B的值:假
AandB的价值:假
C的值:false
我相信这一点起作用的原因是因为这里defaultConfig配置闭包中的东西被委托给ProductFlavor的一个实例,它扩展了DefaultProductFlavor,扩展了包含公共方法" getBuildConfigFields"的BaseConfigImpl。
但是,我没有看到" 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()来获取其值并从String转换为Boolean。