Comment puis-je détecter dans mon code que je suis en mode Release ou en mode Debug?
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.
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
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.
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.
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
}
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.
}