BuildConfig.DEBUG funktioniert nicht (= logisch auf false gesetzt), wenn ich meine App im Debug-Modus ausführe. Ich benutze Gradle zum Bauen. Ich habe ein Bibliotheksprojekt, in dem ich diese Prüfung durchführe. BuildConfig.java sieht im Build-Debug-Ordner folgendermaßen aus:
/** Automatically generated the file. DO NOT MODIFY */
package common.myProject;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
}
und im Release-Ordner:
public static final boolean DEBUG = false;
sowohl im Bibliotheksprojekt als auch im Anwendungsprojekt.
Ich habe versucht, dies zu umgehen, indem ich eine Variable überprüft habe, die eine Klasse meines Projekts ist. Diese Klasse erbt von der Bibliothek und startet beim Start.
<application
android:name=".MyPrj" ...
Dies führt zu einem weiteren Problem: Ich verwende meine DEBUG-Variable in einem DataBaseProvider, der vor der Anwendungsklasse ausgeführt wird, und sie wird aufgrund dieses Fehlers nicht ordnungsgemäß ausgeführt.
android
gradle
android-library
user1324936
quelle
quelle
Antworten:
Dies ist das erwartete Verhalten dafür.
Bibliotheksprojekte veröffentlichen ihre Release-Varianten nur zum Verbrauch durch andere Projekte oder Module.
Wir arbeiten daran, dies zu beheben, aber dies ist nicht trivial und erfordert einen erheblichen Arbeitsaufwand.
Sie können das Problem unter https://code.google.com/p/android/issues/detail?id=52962 verfolgen
quelle
Mit Android Studio 1.1 und der Gradle-Version 1.1 ist Folgendes möglich:
Bibliothek
App
Die vollständige Dokumentation finden Sie hier http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-Publication
EDIT :
Das Problem wurde gerade für Android Studio Gradle Version 3.0 als behoben markiert. Dort können Sie einfach verwenden
implementation project(path: ':library')
und es wird automatisch die richtige Konfiguration ausgewählt.quelle
Überprüfen Sie
imports
, ob BuildConfig manchmal unbeabsichtigt aus einer beliebigen Bibliotheksklasse importiert wird. Beispielsweise:In diesem Fall gibt BuildConfig.DEBUG immer false zurück .
In diesem Fall gibt BuildConfig.DEBUG Ihre echte Build-Variante zurück.
quelle
Dies ist wie Phils Antwort, außer dass der Kontext nicht benötigt wird:
quelle
Um dieses Problem zu umgehen, können Sie diese Methode verwenden, bei der mithilfe von Reflektion der Feldwert aus der App (nicht aus der Bibliothek) abgerufen wird:
Um das
DEBUG
Feld zu erhalten, rufen Sie zum Beispiel einfach Folgendes aufActivity
:Ich habe diese Lösung auch auf dem AOSP Issue Tracker geteilt .
quelle
applicationIdSuffix
in Gradle, die die.BuildConfig
Klasse von diesem obigen Code aus nicht erreichbar machen würde .Nicht wirklich die richtige Methode, um zu überprüfen, ob Sie sich im Debug-Stil befinden, aber Sie können überprüfen, ob die App selbst über Folgendes debuggbar ist:
Das Standardverhalten von Apps und Bibliotheken passt perfekt dazu.
Wenn Sie eine bessere Problemumgehung benötigen, können Sie diese stattdessen verwenden:
quelle
Mit gradle können Sie für jeden Build-Typ eine eigene BuildConfig-Klasse erstellen
für /src/debug/.../MyBuildConfig.java und ...
für /src/release/.../MyBuildConfig.java
Dann benutze:
quelle
Hier ist eine andere Lösung.
1) Erstellen Sie eine Schnittstelle
2) Verwenden Sie diese Schnittstelle für die Anwendungsklasse (Anwendungsmodul).
3) Und dann im Bibliotheksmodul:
quelle
Wir hatten das gleiche Problem. Ich habe mir so etwas ausgedacht:
Wir haben ein SDK (Bibliothek) und ein Demo-Projekt. Die Hierarchie sieht folgendermaßen aus:
Für die Demo-App, die wir haben, waren
:SDK:jarjarDebug
und:SDK:jarjarRelease
sind einige spezifische Aufgaben:SDK
, die einige nachbearbeitete Gläser produzieren:Dies funktioniert auch für mehrere
buildTypes
gleichzeitig erstellte. Das Debuggen ist allerdings etwas schwierig. Bitte kommentieren.quelle
Dies ist meine Problemumgehung: Reflect BuildConfig des App-Moduls:
`public static boolean debug = isDebug ();
quelle
Sie können dies bei jedem der BuildTypes-Projekte versuchen:
quelle
buildType
und nicht in die Build-Konfiguration verschoben . Ich theoretisch Einstellung der Debug-Signatur sollte den gleichen Trick tunIn meinem Fall habe ich das falsche importiert,
BuildConfig
da mein Projekt viele Bibliotheksmodule enthält. Das Update bestand darin, das richtigeBuildConfig
für meinapp
Modul zu importieren .quelle
Arbeiten mit debuggable true in Gradle-Datei.
quelle
BuildConfig.DEBUG ist überhaupt nicht zuverlässig. Android hat ein intern verfügbares internes Flag bereitgestellt, das angibt, ob sich ein Build im Debug- oder Nicht-Debug-Modus befindet
wird wahr sein, wenn es im Debug ist
Credits: https://medium.com/@elye.project/checking-debug-build-the-right-way-d12da1098120
quelle