491 Stimmen

Wie erkenne ich, ob ich im Release- oder Debug-Modus bin?

Wie kann ich in meinem Code erkennen, ob ich im Release-Modus oder Debug-Modus bin?

949voto

CommonsWare Punkte 950864

Die einfachste und beste langfristige Lösung ist die Verwendung von BuildConfig.DEBUG. Dies ist ein boolean-Wert, der für ein Debug-Build true und sonst false ist:

if (BuildConfig.DEBUG) {
  // etwas für einen Debug-Build machen
}

Es gab Berichte, dass dieser Wert nicht zu 100 % zuverlässig ist bei Eclipse-basierten Builds, obwohl ich persönlich kein Problem damit hatte, also kann ich nicht sagen, wie groß das Problem wirklich ist.

Wenn Sie Android Studio verwenden oder Gradle von der Kommandozeile aus führen, können Sie Ihre eigenen Änderungen an BuildConfig hinzufügen oder anderweitig die debug und release Build-Typen anpassen, um diese Situationen zur Laufzeit zu unterscheiden.

Die Lösung von Illegal Argument basiert auf dem Wert des android:debuggable-Flags im Manifest. Wenn dies ist, wie Sie einen "debug"-Build von einem "release"-Build unterscheiden möchten, dann ist das definitionsgemäß die beste Lösung. Beachten Sie jedoch, dass das debuggable-Flag in Zukunft wirklich ein unabhängiges Konzept davon ist, was Gradle/Android Studio als "debug"-Build betrachten. Jeder Build-Typ kann sich dafür entscheiden, das debuggable-Flag auf einen Wert zu setzen, der für diesen Entwickler und diesen Build-Typ sinnvoll ist.

91voto

Illegal Argument Punkte 9707

Versuchen Sie es mit dem folgenden:

boolean isDebuggable =  ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );

Kotlin:

val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE

Es stammt aus dem Beitrag von bundells von hier

76voto

Vansuita Jr. Punkte 1763

Ja, Sie werden keine Probleme haben mit der Verwendung von:

if (BuildConfig.DEBUG) {
   //Es handelt sich nicht um eine Release-Version.
}

Es sei denn, Sie importieren die falsche BuildConfig-Klasse. Stellen Sie sicher, dass Sie die BuildConfig-Klasse Ihres Projekts referenzieren und nicht aus einer Ihrer Abhängigkeitsbibliotheken.

Bildbeschreibung hier eingeben

49voto

Someone Somewhere Punkte 22958

Aufgrund der gemischten Kommentare zu BuildConfig.DEBUG habe 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 "deine.tolle.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 prüfen Sie in Ihrem Code die ENABLE_CRASHLYTICS-Flagge wie folgt:

    if (BuildConfig.ENABLE_CRASHLYTICS)
    {
        // Crashlytics und Answers aktivieren (Crashlytics enthält standardmäßig Answers)
        Fabric.with(this, new Crashlytics());
    }

Verwenden Sie dasselbe Konzept in Ihrer App und benennen Sie ENABLE_CRASHLYTICS wie gewünscht um. Ich mag diesen Ansatz, da ich die Flagge in der Konfiguration sehen und steuern kann.

23voto

Prudhvi Punkte 2257

Alternativ kannst du differenzieren, indem du BuildConfig.BUILD_TYPE; verwendest.

Wenn du Debug-Build ausführst, gibt BuildConfig.BUILD_TYPE.equals("debug"); true zurück. Und für Release-Build gibt BuildConfig.BUILD_TYPE.equals("release"); true zurück.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X