如何在代码中检测到我处于发布模式或调试模式?
最简单,最好的长期解决方案是使用BuildConfig.DEBUG
。这是boolean
值,对于调试版本将是true
,否则false
:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
有报道说这个值在基于Eclipse的构建中并非100%可靠,尽管我个人没有遇到过问题,所以我不能说它究竟有多少问题。
如果您使用的是Android Studio,或者从命令行使用Gradle,则可以将自己的内容添加到BuildConfig
或以其他方式调整debug
和release
构建类型,以帮助在运行时区分这些情况。
Illegal Argument的解决方案基于清单中android:debuggable
标志的值。如果您希望区分“调试”构建和“发布”构建,那么根据定义,这是最佳解决方案。但是,请记住,未来,debuggable
标志实际上是Gradle / Android Studio认为“调试”版本的独立概念。任何构建类型都可以选择将debuggable
标志设置为对该开发人员和该构建类型有意义的任何值。
请尝试以下方法:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
科特林:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
它取自here的bundells帖子
由于关于BuildConfig.DEBUG
的混合评论,我使用以下内容在调试模式下禁用崩解(和分析):
更新/app/build.gradle
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "your.awesome.app"
minSdkVersion 16
targetSdkVersion 25
versionCode 100
versionName "1.0.0"
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'true'
}
buildTypes {
debug {
debuggable true
minifyEnabled false
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'false'
}
release {
debuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
然后,在您的代码中,您检测到ENABLE_CRASHLYTICS
标志如下:
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
在您的应用中使用相同的概念,并将ENABLE_CRASHLYTICS
重命名为您想要的任何内容。我喜欢这种方法,因为我可以看到配置中的标志,我可以控制标志。
或者,您可以使用BuildConfig.BUILD_TYPE区分;
如果你正在运行debug build BuildConfig.BUILD_TYPE.equals("debug");
返回true。对于发布版本,BuildConfig.BUILD_TYPE.equals("release");
返回true。
我正在使用此解决方案,以便发现我的应用程序在调试版本上运行。
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
确保您正在导入正确的BuildConfig类并且是的,您将使用以下方面没有问题:
if (BuildConfig.DEBUG) {
//It's not a release version.
}