检测如果我在Android的发布或debugging模式

我如何检测我在发布模式或Android的debugging模式?

最简单和最好的长期解决scheme是使用BuildConfig.DEBUG 。 这是一个boolean值,对于一个debugging版本将是true ,否则为false

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

曾经有报道说这个值并不是100%可靠的,但是我个人并没有遇到问题,所以我不能说这个问题到底有多大。

如果您使用的是Android Studio,或者您是从命令行使用Gradle,则可以将自己的东西添加到BuildConfig或者调整debug releaserelease版本types,以便在运行时区分这些情况。

来自非法参数的解决scheme基于清单中android:debuggable标志的值。 如果您希望将“debugging”构build与“发布”构build区分开来,那么根据定义,这是最好的解决scheme。 不过,要记住, debuggable标志实际上是一个独立的概念,从Gradle / Android Studio认为是一个“debugging”构build。 任何构buildtypes都可以select将debuggable标志设置为适合该开发者和构buildtypes的任何值。

尝试以下操作:

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

这是从bundells后从这里采取

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

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

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

在这里输入图像描述

由于关于BuildConfig.DEBUG的混合注释,我使用以下命令以debugging模式禁用crashlytics(和analytics):

更新/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重命名为任何你想要的。 我喜欢这种方法,因为我可以看到configuration中的标志,我可以控制标志。

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

如果你正在运行debugging构buildBuildConfig.BUILD_TYPE.equals("debug"); 返回true。 而对于发布构buildBuildConfig.BUILD_TYPE.equals("release"); 返回true。