android.util.Log beim Veröffentlichen - was kann / mache ich nicht

8

Ich habe eine Menge Log.i Log.d Log.e in meinem Code für eine aktuelle App, die ich gemacht habe. Ich bin dabei, diese App zu veröffentlichen, und ich möchte nicht wirklich, dass die Leute es sehen, wenn sie ihr Telefon in adb stecken, aber ich will es dort für mein eigenes Debuggen.

Ich wollte android.util.log erweitern und nur einen booleschen Schalter haben, damit ich das Protokoll einfach ausschalten kann, wenn ich es veröffentliche und es bei der Entwicklung einschalte, aber diese Klasse ist endgültig, fehlt mir ein Trick?

Ich möchte nicht wirklich meinen Code durchgehen und alles entfernen, wenn es schlimmstenfalls zu einem Schlimmsten kommt, könnte ich eine ctrl + h globale ersetzen Log für // Log aber das ist als eine Antwort saugen.

Ich merke auch, dass Log.d zur Laufzeit ausgezogen ist, aber es läuft immer noch (verliert ein wenig Leistung), so dass dies nicht laufen würde ein zusätzlicher Bonus sein.

Ja, also im Grunde suche ich nach einer Möglichkeit, mein Debug programmatisch ein- und auszuschalten, dies kann mir später auch erlauben, es zu einer Vorliebe oder etwas zu machen, wenn die Leute es ansehen oder aushändigen und senden wollen.

Was implementiert ihr dafür?

Danke

    
Blundell 16.11.2010, 22:12
quelle

3 Antworten

16

Octavian weist darauf hin, dass das Einfügen einer Protokollierungskonstante der beste Weg wäre, dies zu tun. Das Schreiben einer neuen Klasse, die die ursprünglichen Protokollierungsmethoden aufruft, wenn das Debuggen aktiviert ist, ist keine gute Idee.

Gute Praxis:

%Vor%

Schlechte Praxis:

%Vor%

Die erste Lösung ist sehr schnell, wenn die Konstante D der Klasse C falsch ist. Wenn Sie komplexe Zeichenfolgenoperationen zum Erstellen Ihrer Protokollierungszeichenfolge haben, werden sie nicht ausgeführt, wenn das Debugging deaktiviert ist. Der Compiler kann diese Operationen sogar zur Kompilierzeit entfernen, wenn D falsch ist, was zu einem Laufzeitaufwand von Null führen kann. Die zweite (schlechte) Lösung wird immer die ganze Zeichenfolge erstellen und eine Methode aufrufen, die nicht benötigt wird.

Im Allgemeinen wäre die erste Lösung die beste Lösung. Und ja, ich nenne die Klasse und die Member C, D und T (Konstanten / Debugging / Tag) - aus Leistungsgründen beim Tippen. ; -)

    
mreichelt 16.11.2010, 22:58
quelle
2

Verschleierung mit Proguard, da proguard Befehle verwendet, um es herauszufiltern, wenn Sie Ihre Proguard-Konfigurationsdatei schreiben..schön und einfach und es funktioniert

    
Fred Grott 16.11.2010 22:27
quelle
2

Es ist im Allgemeinen eine gute Vorgehensweise, sie nicht in Ihren Verteilungscode aufzunehmen, da sie verarbeitet werden müssen, was nur zu unnötigem Batterieverbrauch führt.

Sie könnten einen booleschen Wert in Ihrer Anwendung irgendwo setzen, um eine Entwicklungs- oder Release-Version Ihres Codes anzuzeigen und viele if-Blöcke zu haben, die nach dem Flag suchen und Ihren Log-Code ausführen oder nicht, aber das führt nur zu Code-Bloat.

Sie sollten sie loswerden, sobald Sie sie nicht mehr brauchen.

    
Octavian Damiean 16.11.2010 22:29
quelle