如何检测处于发布模式还是调试模式?

如何在代码中检测我处于发布模式还是调试模式?

177171 次浏览

试试下面的方法:

boolean isDebuggable =  ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );

芬兰湾的科特林:

val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE

它来自bundells的帖子,来自在这里

最简单、最好的长期解决方案是使用BuildConfig.DEBUG。这是一个boolean值,调试版本为true,否则为false:

if (BuildConfig.DEBUG) {
// do something for a debug build
}

有报道说,这个值在基于eclipse的构建中不是100%可靠的,尽管我个人没有遇到过问题,所以我不能说它到底有多大的问题。

如果你正在使用Android Studio,或者如果你正在从命令行使用Gradle,你可以将自己的东西添加到BuildConfig中,或者以其他方式调整debugrelease构建类型,以帮助在运行时区分这些情况。

非法参数的解决方案基于清单中android:debuggable标志的值。如果这就是您希望区分“调试”构建和“发布”构建的方式,那么根据定义,这是最好的解决方案。然而,请记住,debuggable标志实际上是一个独立于Gradle/Android Studio所认为的“调试”构建的概念。任何构建类型都可以选择将debuggable标志设置为对该开发人员和该构建类型有意义的任何值。

由于关于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重命名为任何你想要的。我喜欢这种方法,因为我可以在配置中看到标志,并且可以控制标志。

是的,你将没有问题使用:

if (BuildConfig.DEBUG) {
//It's not a release version.
}

除非您导入了错误的BuildConfig类。确保您引用的是项目的BuildConfig类,而不是来自任何依赖库。

enter image description here

或者,你可以使用BuildConfig.BUILD_TYPE;进行区分

如果你正在运行调试版本 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.
}

构建。IS_DEBUGGABLE也可以。它来自于“ro.debuggable"

if (BuildConfig.DEBUG) {






}

这对我很有用