Réponses:
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.
public static final boolean DEBUG = Boolean.parseBoolean("true");
une version de débogage. Bien que ce soit une façon bizarre de jeu DEBUG
à 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:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
Il est tiré du post bundells d' ici
getApplicationInfo().flags
fonctionner?
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, pas à partir de vos bibliothèques de dépendances.
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
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 l' ENABLE_CRASHLYTICS
indicateur 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
ce que vous voulez. J'aime cette approche car je peux voir le drapeau dans la configuration et je peux contrôler le drapeau.
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 version BuildConfig.BUILD_TYPE.equals("release");
retourne true.
true
.
J'utilise cette solution au cas où je découvrirais que mon application fonctionne sur la version de débogage.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
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. Merci
Assurez-vous que vous importez la classe BuildConfig correcte Et oui, vous n'aurez aucun problème à utiliser:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfig
se trouve dans le package de votre application, par exempleimport com.mycompany.myapp.BuildConfig;