如何解决BuildConfig.DEBUG是编译时常量吗?
我正在尝试创建一个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分配静态的最终布尔值?
- 为什么不能直接使用true | false生成BuildConfig.DEBUG,而必须通过
parseBoolean
函数进行解析?
解决方法
为什么不能为const val分配静态的最终布尔值?
static final
变量在编译时未初始化。因此,我们无法将未初始化的值分配给const val
。
在
- 为什么不能直接使用true | false生成BuildConfig.DEBUG,而必须通过parseBoolean函数进行解析?
BuildConfig
类中的布尔文字会在代码中使用它们时产生IDE警告(至少在Android Studio中)。 您可以在this link中查看更多详细信息。
您可以使用DEBUG
代替BUILD_TYPE
。
const val isDebug = BuildConfig.BUILD_TYPE == "debug"
const val isProductionRelease = BuildConfig.FLAVOR == "production" && !isDebug
或者您也可以在BuildConfig中添加新的常量作为布尔文字。
buildTypes {
debug {
buildConfigField 'boolean','DEBUG_CONST','true'
}
release {
buildConfigField 'boolean','false'
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。