web-dev-qa-db-fra.com

Comment détecter si je suis en mode de publication ou de débogage?

Comment puis-je détecter dans mon code que je suis en mode Release ou en mode Debug?

286
David

La solution la plus simple et la meilleure à long terme consiste à utiliser BuildConfig.DEBUG. C'est une valeur boolean qui sera true pour une version de débogage, false sinon:

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

Il a été rapporté que cette valeur n’est pas fiable à 100% avec les versions basées sur Eclipse, bien que je n’aie personnellement rencontré aucun problème, je ne peux donc pas dire à quel point c’est vraiment le problème.

Si vous utilisez Android Studio, ou si vous utilisez Gradle à partir de la ligne de commande, vous pouvez ajouter vos propres éléments à BuildConfig ou autrement ajuster les types de construction debug et release pour aider à distinguer ces situations lors de l'exécution.

La solution à partir de l'argument illégal est basée sur la valeur de l'indicateur Android:debuggable dans le manifeste. Si c'est ainsi que vous souhaitez distinguer une version de "débogage" d'une version de "version", alors, par définition, c'est la meilleure solution. Cependant, gardez à l'esprit que, désormais, l'indicateur debuggable est un concept indépendant de ce que Gradle/Android Studio considère comme une version de "débogage". Tout type de construction peut choisir de définir l'indicateur debuggable sur la valeur appropriée pour ce développeur et pour ce type de construction.

611
CommonsWare

Essayez ce qui suit:

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

Kotlin:

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

Il est tiré de bundles post de ici

51
Illegal Argument

Oui, vous n'aurez aucun problème à utiliser:

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

Sauf si vous importez la mauvaise classe BuildConfig. Assurez-vous de référencer la classe BuildConfig de votre projet, et non depuis l'une de vos bibliothèques de dépendances.

 enter image description here

46
Vansuita Jr.

En raison des commentaires mitigés à propos de BuildConfig.DEBUG, j'ai utilisé ce qui suit pour désactiver crashlytics (et analyses) en mode débogage:

update /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'
        }
    }
}

puis, dans votre code, vous détectez le drapeau ENABLE_CRASHLYTICS comme suit:

    if (BuildConfig.ENABLE_CRASHLYTICS)
    {
        // enable crashlytics and answers (Crashlytics by default includes Answers)
        Fabric.with(this, new Crashlytics());
    }

utilisez le même concept dans votre application et renommez ENABLE_CRASHLYTICS comme bon vous semble. J'aime cette approche car je peux voir l'indicateur dans la configuration et je peux le contrôler.

27
Someone Somewhere

Alternativement, vous pouvez différencier en utilisant BuildConfig.BUILD_TYPE;

Si vous exécutez la construction de débogage BuildConfig.BUILD_TYPE.equals("debug"); renvoie true. Et pour la version, build BuildConfig.BUILD_TYPE.equals("release"); renvoie true.

10
Prudhvi

J'utilise cette solution pour savoir si mon application est en cours d'exécution sur la version de débogage.

if (BuildConfig.BUILD_TYPE.equals("Debug")){
   //Do something
}
4
Giedrius Šlikas

Assurez-vous que vous importez la classe BuildConfig appropriée Et oui, vous n’aurez aucun problème à utiliser:

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