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