Comment puis-je détecter dans mon code que je suis en mode Release ou Debug?
Comment puis-je détecter dans mon code que je suis en mode Release ou Debug?
La solution la plus simple et la meilleure à long terme est d'utiliser BuildConfig.DEBUG
. C'est une boolean
valeur 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% à partir de versions basées sur Eclipse, bien que personnellement je n'ai pas rencontré de problème, donc je ne peux pas dire à quel point c'est vraiment un problème.
Si vous utilisez Android Studio, ou si vous utilisez Gradle à partir de la ligne de commande, vous pouvez ajouter vos propres trucs BuildConfig
ou modifier les types de build debug
et les release
aider à distinguer ces situations lors de l'exécution.
La solution de Illegal Argument est basée sur la valeur de l' android:debuggable
indicateur dans le manifeste. Si c'est ainsi que vous souhaitez distinguer une build "debug" d'une build "release", alors par définition, c'est la meilleure solution. Cependant, gardez à l'esprit qu'à l'avenir, le debuggable
drapeau est vraiment un concept indépendant de ce que Gradle / Android Studio considère comme une construction de «débogage». Tout type de build peut choisir de définir l' debuggable
indicateur sur la valeur qui convient à ce développeur et à ce type de build.
BuildConfig
se trouve dans le package de votre application, par exempleimport com.mycompany.myapp.BuildConfig;
public static final boolean DEBUG = Boolean.parseBoolean("true");
une version de débogage. Bien que ce soit une façon bizarre de jeuDEBUG
àtrue
, il devrait fonctionner. Si vous voyez cela dans l'une des versions de test 1.3.0, ou si vous avez un cas de test reproductible pour 1.2.2, veuillez signaler un problème . Je ne vois aucun problème en suspens signalant ce problème.Essayez ce qui suit:
Kotlin:
Il est tiré du post bundells d' ici
la source
getApplicationInfo().flags
fonctionner?Oui, vous n'aurez aucun problème à utiliser:
Sauf si vous importez la mauvaise classe BuildConfig. Assurez-vous de référencer la classe BuildConfig de votre projet, pas à partir de vos bibliothèques de dépendances.
la source
En raison des commentaires mitigés sur
BuildConfig.DEBUG
, j'ai utilisé ce qui suit pour désactiver les crashlytics (et les analyses) en mode débogage:update /app/build.gradle
puis, dans votre code, vous détectez l'
ENABLE_CRASHLYTICS
indicateur comme suit:utilisez le même concept dans votre application et renommez
ENABLE_CRASHLYTICS
ce que vous voulez. J'aime cette approche car je peux voir le drapeau dans la configuration et je peux contrôler le drapeau.la source
Alternativement, vous pouvez différencier en utilisant BuildConfig.BUILD_TYPE;
Si vous exécutez le débogage, la version
BuildConfig.BUILD_TYPE.equals("debug");
retourne true. Et pour la version, la versionBuildConfig.BUILD_TYPE.equals("release");
retourne true.la source
true
.J'utilise cette solution au cas où je découvrirais que mon application fonctionne sur la version de débogage.
la source
if (BuildConfig.DEBUG) {}
dans un module gradle dépendant qui n'avait (bien sûr) AUCUNE RÉFÉRENCE au fichier build.gradle de l'application - cela a causé la reconnaissance du mode de débogage de manière incorrecte.if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
CORRIGÉ le problème. MerciAssurez-vous que vous importez la classe BuildConfig correcte Et oui, vous n'aurez aucun problème à utiliser:
la source