android - 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?
- 为什么 BuildConfig.DEBUG 不能直接使用 true|false 生成,而必须通过
parseBoolean
函数解析?
解决方案
为什么我不能将静态最终布尔值分配给 const val?
static final
变量在编译时未初始化。所以我们不能将未初始化的值赋给const val
.
- 为什么 BuildConfig.DEBUG 不能直接使用 true|false 生成,而必须通过 parseBoolean 函数解析?
在代码中使用类中的布尔文字BuildConfig
时(至少在 Android Studio 中),它们会产生 IDE 警告。您可以在此链接中查看更多详细信息。
而不是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', 'DEBUG_CONST', 'false'
}
}
推荐阅读
- css - 在屏幕外循环播放 SVG 幻灯片动画而不会溢出
- matlab - 不一致的错误 ScatteredInterpolant - Matlab
- c - C语言,为什么分配给2个结构的内存(地址)不连续?
- mariadb - 使用 Maria DB 进行 Spring 网站分页的 SQL
- bash - 如何在bash中找到2个日期之间的时间差(以秒为单位)?
- sql - 分组方式、案例时间和交叉应用
- android - android输出日志,但我不能输出多行
- javascript - 如何在不单击按钮的情况下显示此地图?
- python - 如何落实“开会做事”
" - java - 如何在JAVA中拆分字符串同时包含双引号和转义双引号?