BuildConfig.DEBUG仍然被窃听?

时间:2015-02-06 19:55:39

标签: android

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

3 个答案:

答案 0 :(得分:10)

我可以确认此错误仍然存​​在,使用Android Studio 1.2 Build AI-140.1782451和Gradle 1.1针对Android API Level 21编译进行测试。

Android 5.0.2或类似设备上的Nexus 10可以看到此问题。

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

public static final boolean DEBUG = Boolean.parseBoolean("true");

但是如果您调试有问题的应用程序,则DEBUG保持为false。 这阻碍了我的Retrofit调试,因为我想根据构建类型有条件地启用它。

答案 1 :(得分:7)

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

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

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

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

以下是对错误的讨论:https://code.google.com/p/android/issues/detail?id=27940

答案 2 :(得分:3)

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

  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);
    }