如何在代码中检测我处于发布模式还是调试模式?
试试下面的方法:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
芬兰湾的科特林:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
它来自bundells的帖子,来自在这里
最简单、最好的长期解决方案是使用BuildConfig.DEBUG。这是一个boolean值,调试版本为true,否则为false:
BuildConfig.DEBUG
boolean
true
false
if (BuildConfig.DEBUG) { // do something for a debug build }
有报道说,这个值在基于eclipse的构建中不是100%可靠的,尽管我个人没有遇到过问题,所以我不能说它到底有多大的问题。
如果你正在使用Android Studio,或者如果你正在从命令行使用Gradle,你可以将自己的东西添加到BuildConfig中,或者以其他方式调整debug和release构建类型,以帮助在运行时区分这些情况。
BuildConfig
debug
release
非法参数的解决方案基于清单中android:debuggable标志的值。如果这就是您希望区分“调试”构建和“发布”构建的方式,那么根据定义,这是最好的解决方案。然而,请记住,debuggable标志实际上是一个独立于Gradle/Android Studio所认为的“调试”构建的概念。任何构建类型都可以选择将debuggable标志设置为对该开发人员和该构建类型有意义的任何值。
android:debuggable
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标志,如下所示:
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类,而不是来自任何依赖库。
或者,你可以使用BuildConfig.BUILD_TYPE;进行区分
如果你正在运行调试版本 BuildConfig.BUILD_TYPE.equals("debug");返回true。对于发布版本,BuildConfig.BUILD_TYPE.equals("release");返回true
BuildConfig.BUILD_TYPE.equals("debug");
BuildConfig.BUILD_TYPE.equals("release");
我正在使用这种解决方案,以防发现我的应用程序正在调试版本上运行。
if (BuildConfig.BUILD_TYPE.equals("debug")){ //Do something }
确保您导入正确的BuildConfig类 是的,你将没有问题使用:
构建。IS_DEBUGGABLE也可以。它来自于“ro.debuggable"
if (BuildConfig.DEBUG) { }
这对我很有用