检测如果我在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
release
和release
版本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。