如何在我的代码中检测是Release模式还是Debug模式?
最简单、最好的长期解决方案是使用 BuildConfig.DEBUG
。这是一个布尔值,对于 debug 版本将为 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认为的“debug”构建不同。任何构建类型都可以选择将debuggable
标志设置为对该开发人员和该构建类型有意义的任何值。
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
这段内容来自于(链接在此)
getApplicationInfo().flags
需要导入什么? - A1m由于BuildConfig.DEBUG
存在不一致的评论,我使用以下方法在调试模式下禁用了Crashlytics(和分析):
更新/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
重命名为任何您想要的内容。我喜欢这种方法,因为我可以在配置中看到标志并控制标志。
Fabric.with(this, new Crashlytics());
来同时包含Crashlytics和Answers。 - Mike Bonnell或者,您可以使用 BuildConfig.BUILD_TYPE 进行区分;
如果您正在运行调试版本,则 BuildConfig.BUILD_TYPE.equals(“debug”);
返回 true。对于发布版本,BuildConfig.BUILD_TYPE.equals(“release”);
返回 true。
true
。 - Minas Mina我使用这个解决方案来判断我的应用程序是否在调试版本上运行。
if (BuildConfig.BUILD_TYPE.equals("debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
,该模块当然没有引用到应用程序的build.gradle文件 - 这导致调试模式被错误地识别。 if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
修复了这个问题。谢谢。 - kosiara - Bartosz Kosarzyckiif (BuildConfig.DEBUG) {
}
这对我有用
buildFeatures {
buildConfig = true
}
BuildConfig.DEBUG
。val isDebuggable = context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0
if (BuildConfig.DEBUG) {
//It's not a release version.
}
<package_name>.BuildConfig
。 - CoolMindBuild.IS_DEBUGGABLE可能是正确的。它来自于"ro.debuggable"
BuildConfig
is located in your app's package, e.g.import com.mycompany.myapp.BuildConfig;
- Chris Cirefice