BuildConfig.DEBUG 总是 return 错误

BuildConfig.DEBUG always return false

为什么我运行申请的时候BuildConfig.DEBUGreturn是假的?

我用它来控制日志如下:

public static void d(String LOG_TAG, String msg){
    if(BuildConfig.DEBUG){
        Log.d(LOG_TAG,msg);
    }
}

在您的 Android Studio build variant 中,您使用 debug variant 吗?

当您使用 flavors 时适用于 debugrelease

在调试模式下,BuildConfig.BUILD为真,在发布模式下,为假。

如果该代码在库中,那么它永远是假的,多亏了 3-year-old bug in gradle

问题有解决方法:

应用

dependencies {
    releaseCompile project(path: ':library', configuration: 'release')
    debugCompile project(path: ':library', configuration: 'debug')
}

图书馆

android {
    publishNonDefault true
}

也许不理想,但我最终创建了自己的

    buildTypes {
    debug {
        buildConfigField "boolean", "IS_DEBUG", "true" // Had issues with BuildConfig.DEBUG, created IS_DEBUG to ensure functionality behaved as expected.
    }
    release {
        signingConfig signingConfigs.release
        buildConfigField "boolean", "IS_DEBUG", "false"
    }
}

然后像 BuildConfig.IS_DEBUG 一样以编程方式解决它。

检查 class 中的导入,确保您使用的是正确的 BuildConfig 路径。您可以不从您的应用程序中使用 BuildConfig,而是从一些库中使用。

也许您导入了错误的包,请检查一下。 (一些 Android 库也有 BuildConfig class)

我在 build.config 中指定了 debuggable true,但这是 总是 false

此更改后,一切正常:

确保class顶部构建配置的自动导入语句属于您的项目。

com.your.package.name.BuildConfig

BuildConfig 导入可能属于已发布的库,那里 DEBUG 是错误的。

不导入 BuildConfig。这是自动生成的 class,无需导入它,尽管 Android Studio 可能会告诉您。

如果 Android Studio 提示您导入 BuildConfig 可能是因为您需要进行初始 Gradle 构建以创建自动生成的 class最终创建于 com.yourdomain.yourapp.BuildConfig。当您升级 Android Studio 和 Gradle,或者当您 运行 Build -> Clean project.

时,可能会发生这种情况

如果你导入另一个包的 BuildConfig,那么它当然永远是错误的,因为它们只发布它们的发行版,而不是它们的调试版。

关于建议修改 build.gradle 的其他答案,我发现指定 buildType 与 Android Studio 及其生成的 BuildConfig 的默认行为冲突,说明我有一个重复的条目。

所以基本上:

  • 不要导入任何包的BuildConfig(让它保持红色)
  • 不要将 buildType 添加到您的 build.gradle(这可能与自动生成 class 的默认构建行为冲突)
  • 忽略 lint 错误
  • 运行 建造

错误应该消失了。

我在升级 Android Studio 和 Gradle 以及清理项目时遇到过这种情况。

忽略导入提示

不要导入另一个包的 BuildConfig——它永远是错误的,因为他们没有发布他们的调试版本。

导入会导致您遇到的错误

在我的项目中,如果我导入建议的库之一,它会显示你遇到的错误,因为没有人发布调试版本,所以如果你指向它,它当然总是错误的给别人的。

忽略智能感知和运行项目

只是 运行 一个版本。 class 将自动生成并且警告将消失。