我试图创建一个ProductionRelease
编译时常量,这样R8就可以在最终的生产apk中省略调试代码。我遇到了一个路障,BuildConfig。调试
不可分配给常量值
。
// MyApplication.kt
companion object {
const val isDebug = BuildConfig.DEBUG
const val isProductionRelease = BuildConfig.FLAVOR == "production" && !BuildConfig.DEBUG
}
进一步检查后,我发现BuildConfig。DEBUG
用布尔值包装。parseBoolean()
wrapper。
// 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
类中的布尔文本在代码中使用时会产生IDE警告(至少在Android Studio中)。您可以在此链接中查看更多详细信息。
代替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'
}
}
为什么运行应用程序时返回false? 我使用它来控制日志,如下所示:
我试图通过执行这样的东西来组装一个apk: 但我得到以下错误: 任务:应用程序:编译FlavourNameDebugJavaBackJavac失败 重点是gradle似乎没有生成我在gradle的应用程序文件中定义的BuildConfig,在Flavor的定义上定义如下: 根据官方留档这应该是这样的方式,但我没有任何线索的原因,这是不工作。请注意,当我通过点击运行与Android Studio构建
编译和运行 cd tb // make //编译 xt-run --turbo ./output/dsp.elf ./audio_data (或者make run)// 程序默认开启了aec算法,程序执行完后,你会看到目录 audio_data下多了一个 output.wav,这个是第0录mic经过aec后的音频输出。 gdb调试 修改 Makefile,将优化级别改成 -O0 xt-gdb -
编译和运行 cd tb // make //编译 xt-run --turbo ./output/dsp.elf ./audio_data // 程序默认开启了aec算法,程序执行完后,你会看到目录 audio_data下多了一个 output.wav,这个是第0录mic经过aec后的音频输出。 gdb调试 修改 Makefile,将优化级别改成 -O0 xt-gdb --args ./out
问题内容: 假设我有一个这样的课程: 我的应用程序中的许多其他类都在使用这些选项。现在,我只想更改其中一个选项,而仅部署已编译的类。但是,如果将这些字段插入到消费者类中,这将变得不可能,对吗? 是否有任何选项可以禁用内联编译时间常数? 问题答案: 您可以使用String.intern()获得所需的效果,但应注释您的代码,因为对此知之甚少。即 这样可以防止内联编译时间。由于它是指编译器将放入烫发中的
在Android Studio的编译过程中,我得到了时间异常错误。我该怎么修好它?