当前位置: 首页 > 知识库问答 >
问题:

是BuildConfig.调试编译时常量?

许子平
2023-03-14

我试图创建一个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...";
  ...
}

这里的问题是:

  1. 为什么不能将静态最终布尔值指定给常量值

共有1个答案

邴奇逸
2023-03-14

为什么不能将静态最终布尔值指定给常量值?

静态最终变量在编译时不初始化。因此,我们不能将未初始化的值分配给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的编译过程中,我得到了时间异常错误。我该怎么修好它?