In der neuesten Version von ADT (r17) wurde eine generierte Konstante hinzugefügt BuildConfig.DEBUG
, die entsprechend dem Build-Typ festgelegt wird. Das Problem, das ich habe, ist, dass es nie auf false gesetzt ist. Ich habe erwartet, dass es sich ändert, wenn ich "Android Tools -> Signiertes Anwendungspaket exportieren" mache, aber es hat nichts für mich.
Wie ändere ich den Build-Typ?
Es wurde eine Funktion hinzugefügt, mit der Sie Code nur im Debug-Modus ausführen können. Builds generieren jetzt eine Klasse namens BuildConfig, die eine DEBUG-Konstante enthält, die automatisch entsprechend Ihrem Build-Typ festgelegt wird. Sie können die Konstante (BuildConfig.DEBUG) in Ihrem Code überprüfen, um Nur-Debug-Funktionen auszuführen
Antworten:
Derzeit können Sie das richtige Verhalten erzielen, indem Sie "Automatisch erstellen" deaktivieren, das Projekt bereinigen und dann über "Android Tools -> Signiertes Anwendungspaket exportieren" exportieren. Wenn Sie die Anwendung ausführen,
BuildConfig.DEBUG
sollte sie falsch sein.quelle
Mit Eclipse deaktiviere ich immer die Option "Automatisch erstellen", bevor ich die App in der Version exportiere. Dann bereinige ich das Projekt und exportiere. Andernfalls wird die Kompilierung im Debug-Modus gestartet, und der Wert von BuildConfig.DEBUG ist möglicherweise falsch.
Mit Android Studio füge ich einfach meine eigene benutzerdefinierte Variable in das build.gradle ein:
Wenn ich das Projekt erstelle, wird die Datei BuildConfig.java wie folgt generiert:
Dann kann ich in meinem Code Folgendes verwenden:
Ich empfehle, nach dem Wechsel von Debug / Release Build zu bereinigen.
quelle
Es funktioniert nicht richtig:
Ausgabe von 27940 : BuildConfig.DEBUG ist „true“ für exportierte Anwendungspaket
Es ist enttäuschend, dass sie manchmal fehlerhafte Funktionen veröffentlichen.
quelle
Es funktioniert, aber beachten Sie, dass sich die Codedatei auch beim Exportieren der signierten Datei nie ändert. Der Exportprozess ändert den Wert dieser Variablen auf false, mit dem Sie den falschen Eindruck erwecken könnte , dass es funktioniert nicht. Ich habe dies mit Protokollierungsanweisungen wie getestet
Beim Testen erzeugen meine Log-Anweisungen keine Ausgabe mehr.
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 .
ps Ich kopiere nur diese aus meiner Antwort hier: BuildConfig.DEBUG immer falsch, wenn Bibliotheksprojekte mit gradle erstellt werden
quelle
android.support.compat
. Ich denke, das ist ein weiterer Grund, einfach Ihr eigenes Feld mit einem anderen Namen zu definieren.Von der Vorbereitung auf die Veröffentlichung :
Weitere Informationen finden Sie unter dem Link.
quelle
Die Lösung für mich:
Es ist Arbeit in R20
quelle
Ich würde eine einfache Problemumgehung vorschlagen wollen, wenn Sie während des APK-Exports Proguard verwenden.
Proguard bietet eine Möglichkeit, Aufrufe bestimmter Funktionen im Freigabemodus zu entfernen. Alle Aufrufe zum Debuggen von Protokollen können mit der folgenden Einstellung entfernt werden
proguard-project.txt
.Und die Optimierung setzt ein
project.properties
.Damit müssen Sie sich nicht um unnötige String-Berechnungen kümmern, die an das Debug-Protokoll übergeben werden, auf das @Jeremyfa verwiesen hat. Die Berechnungen werden gerade im Release Build entfernt.
Die Problemumgehung für BuildConfig.DEBUG verwendet also dieselbe Proguard-Funktion wie die folgende.
Und nach dem Einstellen
proguard-project.txt
.Ich würde es vorziehen, dies zu verwenden, um die
Build Automatically
Option zu deaktivieren , da dies nicht von der individuellen IDE-Einstellung des Builders abhängt, sondern als festgeschriebene Datei verwaltet wird, die von Entwicklern gemeinsam genutzt wird.quelle
Funktioniert meines Wissens nicht richtig ( Android-Ausgabe 22241 )
Ich hatte einige Probleme mit einem Projekt (bei der Arbeit mit Eclipse). Diese Konstante wurde beim Exportieren einer signierten APK meines Projekts nicht auf true gesetzt :(
Würde gerne hören, dass es funktioniert
quelle
Ein guter Weg ist es, eine eigene Klasse zu erstellen:
quelle
Ich habe ein seltsames Verhalten gesehen, das damit zu tun hat, dass die Werte in BuildConfig auf ihre endgültigen Werte gesetzt werden. Dies hat möglicherweise etwas mit Ihrem Problem zu tun.
Die einfache Erklärung ist, dass die Standardwerte zunächst vor der Ausführung von Proguard festgelegt werden. Nach der Ausführung von Proguard wird die BuildConfig-Datei mit den richtigen Werten neu generiert. Proguard hat Ihren Code jedoch bereits zu diesem Zeitpunkt optimiert, und Sie haben Probleme.
Hier ist ein Fehler, den ich gegen Gradle erstellt habe. https://code.google.com/p/android/issues/detail?id=182449
quelle