Android BuildConfig.DEBUG是否仍有错误?

Android BuildConfig.DEBUG是否仍有错误?,android,Android,根据BuildConfig,调试是不可靠的。 由于我的同事正在广泛地使用BuildConfig.DEBUG(看起来像生产代码中的测试代码),我想知道这个标志是否仍然像几年前一样有缺陷。您所指的问题似乎是ADT+Eclipse特有的。所以我相信,如果你使用的是Gradle和Android Studio,这不应该是一个问题 至关重要的是:只有在使用“自动生成”选项且未清理项目时,才会发生这种情况。正因为如此,我几乎不认为这是一个错误。毕竟,当您进行代码更改并自动启用Build时,谁会说什么应该重建,

根据BuildConfig,调试是不可靠的。
由于我的同事正在广泛地使用BuildConfig.DEBUG(看起来像生产代码中的测试代码),我想知道这个标志是否仍然像几年前一样有缺陷。

您所指的问题似乎是ADT+Eclipse特有的。所以我相信,如果你使用的是Gradle和Android Studio,这不应该是一个问题

至关重要的是:只有在使用“自动生成”选项且未清理项目时,才会发生这种情况。正因为如此,我几乎不认为这是一个错误。毕竟,当您进行代码更改并自动启用Build时,谁会说什么应该重建,什么不应该重建

作为一种良好实践,您应该在实际发布之前始终清理和重建项目,在这种情况下,这不是问题

所以是的,如果您使用此设置,并且在发布之前没有重建项目,并且仍然使用ADT和Eclipse(似乎注定要被弃用),那么这仍然是一个问题


下面是关于这个bug的讨论:

我可以确认这个bug仍然存在,并使用Android Studio 1.2 Build AI-140.1782451和Gradle 1.1编译Android API Level 21进行了测试

安卓5.0.2或类似设备上的Nexus10可以看到这个问题

如果在源代码编辑器中打开BuildConfig.DEBUG,它会显示:

public static final boolean DEBUG = Boolean.parseBoolean("true");
但如果您调试有问题的应用程序,debug将保持为false。
这阻碍了我的改装调试,因为我想根据构建类型有条件地启用它。

我对预定义变量总是有问题,所以我创建了自己的:

  buildTypes {
        // If we use the same keystore for debug and release, we don't have to wipe all preferences
        debug {
            //noinspection GroovyAssignabilityCheck
            signingConfig signingConfigs.releaseConfig
            zipAlignEnabled true

            resValue "bool", "DEBUG", "true"
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //noinspection GroovyAssignabilityCheck
            signingConfig signingConfigs.releaseConfig
            zipAlignEnabled true

            resValue "bool", "DEBUG", "false"
        }
    }
我可以在您的代码中读取此变量:

    if (!MyApplication.get().getResources().getBoolean(R.bool.DEBUG)) {
        // Firebase Crash reporting
        FirebaseCrash.report(e);
    }

如果您使用Android Studio和Gradle for Android,
BuildConfig
R
一样可靠,因为它们是使用相同的机制创建的。我从来没有遇到过以前报告的
BuildConfig
和Eclipse/ADT的问题,因此我不知道它们是否被清除。我们使用的是Android Studio和Gradle-听说它可以使用,我感到很欣慰。如果BuildConfig.DEBUG使用得当,您的测试代码实际上不会投入生产。对于这段代码:
if(BuildConfig.DEBUG){foo();}
如果该常量为false,则整个过程将被消除。如果这是真的,则编译结果中只会出现
foo()
。即使在AS 2.2.3 r25上清除项目后,它对我也不起作用。运行应用程序或调试应用程序报告
BuildConfig.Debug=true
。也许建立签名的APK工作,我不知道。谢谢这些有用的信息。仅供参考,与第一段相反,据报道,Android Studio(截至2.1.1)中使用Gradle时,至少有时会出现此问题。
Boolean.parseBoolean(“true”)
return
true
,但过去使用的是
ADT
Build(即:在
Gradle
Build之前)was
public final static boolean DEBUG=boolean.parseBoolean(null)您向Google报告过这个问题吗?没有,因为有几种调试构建类型,我现在使用BuildConfig.BUILD\u类型并检查是否与某个调试或登台类型相等。是的,AS 2.2.3 r25AS 3.0.1在调试模式下刚刚构建了签名apk:(