【发布时间】:2020-10-28 03:57:28
【问题描述】:
我正在尝试创建一个ProductionRelease 编译时常量,以便 R8 可以在最终生产 apk 中省略我们的调试代码。我遇到了一个障碍,即BuildConfig.DEBUG 不能分配给const val。
// MyApplication.kt
companion object {
const val isDebug = BuildConfig.DEBUG
const val isProductionRelease = BuildConfig.FLAVOR == "production" && !BuildConfig.DEBUG
}
经过进一步检查,我发现BuildConfig.DEBUG 被Boolean.parseBoolean() 包装器包裹。
// BuildConfig.java
/**
* Automatically generated file. DO NOT MODIFY
*/
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com...";
...
}
这里的问题是:
- 为什么不能将静态最终布尔值分配给 const val?
- 为什么 BuildConfig.DEBUG 不能直接使用 true|false 生成,而必须通过
parseBoolean函数解析?
【问题讨论】:
标签: android kotlin compile-time-constant android-r8