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

时间:2014-05-24 11:49:53

标签: android android-build-type

如何在我的代码中检测到我处于发布模式或调试模式?

8 个答案:

答案 0 :(得分:643)

最简单,最好的长期解决方案是使用BuildConfig.DEBUG。对于调试版本,这是booleantrue,否则为false

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

据报道,这个值在基于Eclipse的构建中并非100%可靠,但我个人没有遇到过问题,所以我不能说它到底有多少问题。

如果您使用的是Android Studio,或者从命令行使用Gradle,则可以将自己的内容添加到BuildConfig或以其他方式调整debugrelease版本类型帮助在运行时区分这些情况。

来自Illegal Argument的解决方案基于清单中android:debuggable标志的值。如果您希望区分“调试”构建和“发布”构建,那么根据定义,这是最佳解决方案。但是,请记住,debuggable标志实际上是Gradle / Android Studio认为“调试”版本的独立概念。任何构建类型都可以选择将debuggable标志设置为对该开发人员和该构建类型有意义的任何值。

答案 1 :(得分:54)

尝试以下方法:

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

科特林:

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

取自here

的bundells帖子

答案 2 :(得分:48)

是的,您使用时没有问题:

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

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

enter image description here

答案 3 :(得分:29)

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

答案 4 :(得分:10)

或者,您可以使用 BuildConfig.BUILD_TYPE;

进行区分

如果您正在运行调试版本 BuildConfig.BUILD_TYPE.equals("debug");返回true。对于发布版本,BuildConfig.BUILD_TYPE.equals("release");将返回true。

答案 5 :(得分:4)

我正在使用此解决方案,以便发现我的应用程序在调试版本上运行。

if (BuildConfig.BUILD_TYPE.equals("Debug")){
   //Do something
}

答案 6 :(得分:0)

确保您正在导入正确的Bui​​ldConfig类 是的,您将不会有任何问题:

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

答案 7 :(得分:0)

Build.IS_DEBUGGABLE 可能没问题。它来自“ro.debuggable”