BuildConfig.DEBUG始终返回false

37

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

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

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

9个回答

111

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


9
是的,你需要导入com.myurl.mypackage.BuildConfig,而不是兼容性版本或任何其他Android或库版本。 - Gary99
我已导入Timber的BuildConfig。再见,20分钟 :) - Daniel Wilson
7
这个简短的单段回答被低估了。 - Martin Marconcini
1
对于React Native,您需要特别小心,不要导入import com.facebook.react.BuildConfig;,请务必导入您自己的BuildConfig!否则,当您晃动设备时,您的Dev菜单将永远不会出现。 - Airman00

13

您的Android Studio的构建变体是在调试变体上吗?

这适用于使用flavors(即debugrelease)的情况。

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


如果我在调试旁边有一个开发变体,并且我希望它们都可以进行调试,那么这是如何工作的?向dev变体添加debuggable=true并没有起到帮助作用。 - Chapz

9

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

com.your.package.name.BuildConfig

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


7
如果这段代码在一个库中,那么由于Gradle中存在一个三年前的错误,它将始终为false。请参考此处了解详情。

1
这个问题在2017年已经解决了 :-) (AGP 3.0) - Blundell

7
不要导入BuildConfig。这是一个自动生成的类,导入它是不必要的,尽管Android Studio可能会提示你这样做。
如果Android Studio提示你导入BuildConfig,可能是因为你需要进行初始Gradle构建来创建自动生成的类,这个类最终被创建在com.yourdomain.yourapp.BuildConfig。当你升级Android Studio和Gradle,或者运行Build -> Clean project时,就会发生这种情况。
如果你导入另一个包的BuildConfig,那么肯定会一直是false,因为他们只发布了发布版本而不是调试版本。
关于其他回答推荐修改build.gradle的问题,我发现指定buildType会与Android Studio的默认行为以及它生成的BuildConfig产生冲突,导致我有一个重复的条目。
所以本质上:
  • 不要导入任何包的BuildConfig(让它保持红色)
  • 不要将buildType添加到您的build.gradle中(这可能会与自动生成类的默认构建行为冲突)
  • 忽略lint错误
  • 运行构建

错误应该会消失。

当我升级Android Studio和Gradle以及清理项目时,我遇到了这个问题。

忽略导入提示

不要导入另一个包的BuildConfig - 它将始终为false,因为他们没有发布调试版本。

enter image description here

导入会导致您遇到的错误

在我的项目中,如果我导入建议的库之一,它将显示您正在遇到的错误,因为没有人发布调试版本,所以如果您指向别人的版本,它肯定会始终为false。

enter image description here

enter image description here

忽略智能感知并运行项目。
只需运行一次构建,类将自动生成,警告将消失。

enter image description here


4
我在 build.config 文件中指定了 debuggable true,但它始终为 false。
只需移除此项更改,一切就正常了:
enter image description here

4
也许不是最理想的选择,但我最终还是创建了自己的。
    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级别创建常量的想法。 - Abhinav Saxena
为了使基于BuildConfig的常量半动态化,您应该使用flavors。但这超出了本问题的范围。 - Abhinav Saxena

3
也许您正在导入错误的包,请检查一下。(一些Android库也有BuildConfig类)

3
有一个解决该问题的方法:
应用程序
dependencies {
    releaseCompile project(path: ':library', configuration: 'release')
    debugCompile project(path: ':library', configuration: 'debug')
}

图书馆

android {
    publishNonDefault true
}

这对我来说是正确的答案,至少如果你在使用一个模块/库时遇到了这个问题。而且这不是一种变通方法,因为你拥有这个库,所以你可以覆盖默认的Android行为。 - botzek13
应该使用Flavors来管理发布时间和调试时间设置。 - Abhinav Saxena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接