Android BuildConfig.DEBUG是否仍有错误?
根据BuildConfig,调试是不可靠的。Android BuildConfig.DEBUG是否仍有错误?,android,Android,根据BuildConfig,调试是不可靠的。 由于我的同事正在广泛地使用BuildConfig.DEBUG(看起来像生产代码中的测试代码),我想知道这个标志是否仍然像几年前一样有缺陷。您所指的问题似乎是ADT+Eclipse特有的。所以我相信,如果你使用的是Gradle和Android Studio,这不应该是一个问题 至关重要的是:只有在使用“自动生成”选项且未清理项目时,才会发生这种情况。正因为如此,我几乎不认为这是一个错误。毕竟,当您进行代码更改并自动启用Build时,谁会说什么应该重建,
由于我的同事正在广泛地使用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”)
returntrue
,但过去使用的是ADT
Build(即:在Gradle
Build之前)waspublic final static boolean DEBUG=boolean.parseBoolean(null)代码>您向Google报告过这个问题吗?没有,因为有几种调试构建类型,我现在使用BuildConfig.BUILD\u类型并检查是否与某个调试或登台类型相等。是的,AS 2.2.3 r25AS 3.0.1在调试模式下刚刚构建了签名apk:(