Wie kann ich in meinem Code erkennen, dass ich mich im Release- oder Debug-Modus befinde?
quelle
Wie kann ich in meinem Code erkennen, dass ich mich im Release- oder Debug-Modus befinde?
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.
BuildConfig
befindet sich im Paket Ihrer App, z. B.import com.mycompany.myapp.BuildConfig;
public static final boolean DEBUG = Boolean.parseBoolean("true");
für einen Debug Build. Während die eine bizarre Art und Weise zu Satz istDEBUG
zutrue
, 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:
Kotlin:
Es stammt aus Bundels Post von hier
quelle
getApplicationInfo().flags
es funktioniert?Ja, Sie werden keine Probleme haben mit:
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.
quelle
Aufgrund der gemischten Kommentare zu habe
BuildConfig.DEBUG
ich Folgendes verwendet, um Crashlytics (und Analytics) im Debug-Modus zu deaktivieren:update /app/build.gradle
Dann erkennen Sie in Ihrem Code die
ENABLE_CRASHLYTICS
Flagge wie folgt: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.quelle
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 BuildBuildConfig.BUILD_TYPE.equals("release");
gibt true zurück.quelle
true
.Ich verwende diese Lösung, um herauszufinden, dass meine App in der Debug-Version ausgeführt wird.
quelle
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. DankeStellen Sie sicher, dass Sie die richtige BuildConfig-Klasse importieren. Und ja, Sie haben keine Probleme mit:
quelle