Antworten:
Die einfachste und beste langfristige Lösung ist die Verwendung BuildConfig.DEBUG
. Dies ist ein boolean
Wert, der true
für einen Debug-Build gilt, false
andernfalls:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
Es wurde berichtet, dass dieser Wert bei Eclipse-basierten Builds nicht 100% zuverlässig ist, obwohl ich persönlich kein Problem festgestellt habe, sodass ich nicht sagen kann, wie groß das Problem tatsächlich ist.
Wenn Sie Android Studio verwenden, oder wenn Sie Gradle über die Befehlszeile verwenden, können Sie Ihre eigenen Sachen hinzufügen BuildConfig
oder auf andere Weise optimieren die debug
und release
Build - Typen zu unterscheiden helfen , diese Situationen zur Laufzeit.
Die Lösung von Illegal Argument basiert auf dem Wert des android:debuggable
Flags im Manifest. Wenn Sie auf diese Weise einen "Debug" -Build von einem "Release" -Build unterscheiden möchten, ist dies per Definition die beste Lösung. debuggable
Bedenken Sie jedoch, dass die Flagge in Zukunft wirklich ein unabhängiges Konzept von dem ist, was Gradle / Android Studio als "Debug" -Build betrachtet. Jeder Build-Typ kann das debuggable
Flag auf einen beliebigen Wert setzen, der für diesen Entwickler und für diesen Build-Typ sinnvoll ist.
public static final boolean DEBUG = Boolean.parseBoolean("true");
für einen Debug Build. Während die eine bizarre Art und Weise zu Satz ist DEBUG
zu true
, sollte es funktionieren. Wenn Sie dies in einer der Testversionen 1.3.0 sehen oder wenn Sie einen reproduzierbaren Testfall für 1.2.2 haben, reichen Sie bitte ein Problem ein . Ich sehe keine offenen Probleme, die dieses Problem melden.
Versuche Folgendes:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
Es stammt aus Bundels Post von hier
getApplicationInfo().flags
es funktioniert?
Ja, Sie werden keine Probleme haben mit:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
Es sei denn, Sie importieren die falsche BuildConfig-Klasse. Stellen Sie sicher, dass Sie auf die BuildConfig-Klasse Ihres Projekts verweisen und nicht auf eine Ihrer Abhängigkeitsbibliotheken.
Aufgrund der gemischten Kommentare zu habe BuildConfig.DEBUG
ich Folgendes verwendet, um Crashlytics (und Analytics) im Debug-Modus zu deaktivieren:
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'
}
}
}
Dann erkennen Sie in Ihrem Code die ENABLE_CRASHLYTICS
Flagge wie folgt:
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
Verwenden Sie dasselbe Konzept in Ihrer App und benennen ENABLE_CRASHLYTICS
Sie es nach Belieben um. Ich mag diesen Ansatz, weil ich das Flag in der Konfiguration sehen und das Flag steuern kann.
Alternativ können Sie mit BuildConfig.BUILD_TYPE unterscheiden.
Wenn Sie Debug Build
BuildConfig.BUILD_TYPE.equals("debug");
ausführen, wird true zurückgegeben. Und für Release Build BuildConfig.BUILD_TYPE.equals("release");
gibt true zurück.
true
.
Ich verwende diese Lösung, um herauszufinden, dass meine App in der Debug-Version ausgeführt wird.
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
in einem abhängigen Gradle-Modul verwendet, das (natürlich) KEINEN VERWEIS auf die build.gradle-Datei der App hatte - dies führte dazu, dass der Debug-Modus falsch erkannt wurde. if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
Das Problem wurde behoben. Danke
Stellen Sie sicher, dass Sie die richtige BuildConfig-Klasse importieren. Und ja, Sie haben keine Probleme mit:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfig
befindet sich im Paket Ihrer App, z. B.import com.mycompany.myapp.BuildConfig;