Release-Debuggen erstellt für Android-Anwendung

7

In C ++ würde ich normalerweise zwei Builds einrichten - debuggen und release mit jeweils DEBUG und RELEASE vordefiniert. Ich würde dann diese Definitionen verwenden, um konstante Werte zu bestimmen, wie die Protokollierung aktiviert / deaktiviert, Server-URL und etc.

Im Moment, in Java / Android, kommentiere ich einige Sachen, bevor ich die Veröffentlichung mache. Das ist kein guter Weg, kann ich sagen. Ich kann etwas vergessen.

Wie kann man sicherstellen, dass beim Erstellen einer Release-Version (signiert) oder einer Debug-Version (unsigniert) nichts vergessen wird?

    
Pijusn 17.09.2012, 12:06
quelle

5 Antworten

8

Es gibt keinen (standardmäßig) Präprozessor für Java, also keine #ifdef sachen zur Kompilierzeit. Aber wenn es Ihnen nichts ausmacht, Debug-Code in Ihrer App zu belassen, können Sie mit diesem Code überprüfen, ob die App zur Laufzeit released oder debuggt:

%Vor%

überprüft debuggable Flag-Wert. Und flad wird automatisch auf false für Release-Builds und true für Debug-Builds gesetzt.

Wenn Sie Debug-Code loswerden wollen, können Sie ProGuard verwenden, um bestimmte Klassen oder Methoden zu entfernen. Und standardmäßig ist ProGuard nur für Release Builds am Erstellungsprozess beteiligt.

    
Marcin Orlowski 17.09.2012, 12:17
quelle
14

Wenn Sie die Anwendung von Eclipse ausführen, wird es immer ein Debug sein.

Wenn Sie die Anwendung exportieren (Android Tools - & (nicht) signiertes Anwendungspaket exportieren)

Wenn Sie dynamisch wissen wollen, ob es freigegeben oder debuggt, können Sie BuildConfig.DEBUG verwenden (Es befindet sich im gen-Ordner, ich weiß nicht, ob dies von allen API-Ebenen unterstützt wird)

Wie folgt:

%Vor%

Wenn Sie sich die generierten Bytecodes ansehen, sehen Sie Folgendes (im Debug-Modus):

%Vor%

Erzeugt die folgenden Bytecodes:

%Vor%

Und wenn BuildConfig.DEBUG falsch ist

%Vor%     
Ion Aalbers 17.09.2012 12:12
quelle
0

Normalerweise erstelle ich eine separate Protokollklasse, in der ich eine statische DEBUG-Variable festlege. Alles, was ich vor dem Erstellen eines Produktions-Builds brauche, ist, diese DEBUG-Variable auf false zu setzen.

%Vor%

Für die Protokollierung -

%Vor%     
Mukesh Soni 17.09.2012 12:14
quelle
0

Ich hatte das gleiche Problem wie jedes Mal, wenn ich das Projekt als Android-Anwendung lief es im Debugger-Modus zu öffnen, aber dann wurde das Problem gelöst.

- Wenn Sie in Eclipse arbeiten, müssen Sie die Java EE-Perspektive verwenden - Wählen Sie stattdessen nur Java-Perspektive.

- Löschen Sie Ihre App. -Installieren Sie die App vom Gerät. - Starten Sie Ihr Gerät neu (Einfach so, dass kein Cache gespeichert wird) - Führen Sie Ihre App aus.

Der Debugger-Modus wird diesmal nicht angezeigt. Kopiere die im Ordner bin generierte apk und probiere sie auch auf anderen Geräten aus

    
Nishant 05.10.2013 10:47
quelle
0

Ich habe einen Weg gefunden, eine Preprocessing-Direktive anständig nachzubilden:

In meiner Gradle buildTypes definiere ich:

%Vor%

Dann mache ich in meinem Code folgendes:

%Vor%

und bei Bedarf natürlich:

%Vor%

Beide Blöcke sind in der debug APK vorhanden, aber beim Erstellen einer release -Version ist Proguard clever genug, um zu bestimmen, dass der debug -Block entfernt werden kann, wie von ihm abhängig ist a if (false) (wird auch aus dem resultierenden Code entfernt).

Wenn Sie einige Debug-spezifische Klassen vom Block debug aufrufen und nur von dort, werden sie aus dem resultierenden APK entfernt, da sie als unbenutzt betrachtet werden . Dies ist auch ein interessanter Punkt : Ihr Code kann nicht so getempert werden, dass er diesen Code verwendet.

Ich könnte das alles feststellen, indem ich meine dump , mapping und usage Proguard Ausgabedateien überprüfe.

    
Shlublu 04.03.2016 11:25
quelle

Tags und Links