BuildConfig.DEBUG 总是返回 false

Posted

技术标签:

【中文标题】BuildConfig.DEBUG 总是返回 false【英文标题】:BuildConfig.DEBUG always return false 【发布时间】:2016-07-20 22:36:01 【问题描述】:

为什么BuildConfig.DEBUG 在我运行应用程序时返回 false?

我用它来控制日志,如下所示:

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

【问题讨论】:

BuildConfig.DEBUG always false when building library projects with gradle的可能重复 【参考方案1】:

检查类中的导入,确保使用正确的 BuildConfig 路径。您可以使用 BuildConfig 不是来自您的应用程序,而是来自某个库。

【讨论】:

是的。您需要import com.myurl.mypackage.BuildConfig,而不是兼容或任何其他 android 或库版本。 我已经导入了 Timber 的 BuildConfig。再见 20 分钟 :) 这个简单的单段答案被低估了。 对于 React Native 你需要格外小心不要导入 import com.facebook.react.BuildConfig; ,确保导入你自己的 BuildConfig!否则,当您摇动设备时,您的开发菜单将永远不会出现【参考方案2】:

在您的 Android Studio 构建变体中,您是否使用 debug 变体?

当您使用flavors 时,即适用于debugrelease

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

【讨论】:

【参考方案3】:

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

com.your.package.name.BuildConfig

BuildConfig 导入可能属于已发布的库,DEBUG 为 false。

【讨论】:

【参考方案4】:

如果该代码在库中,那么它总是错误的,这要感谢3-year-old bug in gradle。

【讨论】:

【参考方案5】:

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

如果 Android Studio 提示您导入 BuildConfig,可能是因为您需要进行初始 Gradle 构建以创建自动生成的类,该类最终在 com.yourdomain.yourapp.BuildConfig 创建。当您升级 Android Studio 和 Gradle 或运行 Build -> Clean project 时,可能会发生这种情况。

如果你导入另一个包的BuildConfig,那么当然它总是错误的,因为他们只是发布他们的发布风格而不是他们的调试风格。

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

所以本质上:

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

错误应该消失。

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

忽略导入提示

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

导入会导致您遇到的错误

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

忽略智能感知并运行项目

只需运行构建。该类将自动生成,警告将消失。

【讨论】:

【参考方案6】:

有解决该问题的方法:

应用

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

图书馆

android 
    publishNonDefault true

【讨论】:

这对我来说是正确的答案,至少如果您对模块/库有这个问题。这不是一种解决方法,您会覆盖库的默认 Android 行为,因为您拥有此库。 应该使用风味来管理发布时间和调试时间设置。【参考方案7】:

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

    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 一样处理它。

【讨论】:

这是手动设置。相反,请使用通常的模式,因为当您从debug 模式切换到release 时,BuildConfig.DEBUG 的值会发生变化。但是谢谢,您已经提出了在 BuildConfig 级别创建常量的想法。 为了使基于BuildConfig 的常量半动态,您应该使用风味。但这超出了这个问题的范围。【参考方案8】:

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

【讨论】:

【参考方案9】:

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

更改后,一切正常:

【讨论】:

以上是关于BuildConfig.DEBUG 总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章

Android BuildConfig.DEBUG的妙用

Android Studio 中有没有类似C#的#if DEBUG功能

错误记录Android Gradle 配置报错 ( gradle.properties 配置到 BuildConfig 中需要注意类型转换 | 位置: 类 BuildConfig )

使用 gradle 从发布 apk 文件中删除日志记录

Android 判断是开发debug模式,还是发布release模式

bcrypt.compare() 在验证密码时总是返回 false