Boo*_*oon 3 android android-gradle-plugin
在Gradle中,如何基于其他构建配置字段创建布尔构建配置字段?
例如:
buildConfigField BOOLEAN, TEST_A, "false"
buildConfigField BOOLEAN, TEST_B, "false"
buildConfigField BOOLEAN, TEST_C, TEST_A && TEST_B
Run Code Online (Sandbox Code Playgroud)
这个代码写在你的android.defaultConfig块中,完全是这样的:
buildConfigField("boolean", "TEST_A", "false");
buildConfigField("boolean", "TEST_B", "false");
buildConfigField("boolean", "TEST_C", "TEST_A && TEST_B");
Run Code Online (Sandbox Code Playgroud)
这导致您的以下行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;
Run Code Online (Sandbox Code Playgroud)
在以这种方式声明构建配置值时要注意一件有趣的事情,如果您查看BuildConfig.java结构如何,您可以看到在特定构建类型(例如android.buildTypes.debug)中声明的字段出现在默认配置中声明的字段之前.
因此,在所提供的示例,如果你想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
}
}
Run Code Online (Sandbox Code Playgroud)
当您构建项目时,您应该在 Android Studio 的 gradle 控制台中看到以下内容:
A 的值:假
B 的值:假
AandB 的值:假
C 的值:假
我相信它起作用的原因是因为这里的 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();
}
Run Code Online (Sandbox Code Playgroud)
因此需要获取它的值并通过调用 Boolean.valueOf() 从 String 转换为 Boolean。
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |