Frage

Ich habe für eine aktuelle app in meinem Code eine verdammt viel von Log.i Log.d Log.e bekam ich getan habe. Ich bin über diese App zu veröffentlichen, und ich weiß nicht wirklich will die Leute es sehen, wenn sie dort Telefon in adb stecken, aber ich will es für meine eigene Fehlersuche.

Ich wollte verlängern android.util.log und haben nur einen Booleschen Schalter dort, so konnte ich nur das Protokoll deaktivieren, wenn ich veröffentlichen und schalten Sie ihn bei der Entwicklung, aber diese Klasse ist endgültig, bin ich dabei einen Trick?

Ich will nicht wirklich durch meinen Code gehen, ein Entfernen allem dann, wenn schlimmsten schlimmsten kommt ich ctrl + h global ersetzen Log für // Log tun könnte, aber das als Antwort nicht saugen.

Ich habe auch bewusst, dass Log.d zur Laufzeit gezupft wird, aber es ist immer noch ran (ein wenig Leistung zu verlieren) so nicht läuft dies ein zusätzlicher Bonus wäre.

Ja also im Grunde eine Art und Weise ich mich auf meine Debug ein- und ausschalten programmatisch, dies kann mir auch erlauben, um es später zu machen eine Präferenz oder etwas, wenn die Leute es oder Hilfe aus betrachten möchten und senden Sie es an.

Was euch für diese umzusetzen?

Danke

War es hilfreich?

Lösung

Als Octavian weist darauf hin, ein Logging-Konstante Einfügen wäre der beste Weg, dies zu tun. Schreiben Sie eine neue Klasse für diese, die die ursprünglichen Logging-Methoden aufrufen, wenn Debuggen aktiviert ist, ist keine gute Idee.

Good Practice:

if (C.D) { Log.d(C.T, "your log text here " + foo + bar); }

Bad Praxis:

YourLog.d("your log text here " + foo + bar);

// and in YourLog.java's d() method:
... { if (debugging) Log.d(tag, text); }

Die erste Lösung ist sehr schnell, wenn die Konstante D der Klasse C falsch ist. Wenn Sie für die Erstellung Ihres Logging-String komplexe String-Operationen haben werden sie nicht ausgeführt werden, wenn das Debuggen deaktiviert ist. Der Compiler kann auch diese Vorgänge bei der Kompilierung entfernen, wenn D falsch ist, die in Null-Laufzeitaufwand führen kann. Die zweite (sehr schlecht) Lösung wird immer die gesamte Zeichenfolge bauen und eine Methode aufrufen, die Overhead Sie dies nicht tun müssen.

In der Regel der ersten Lösung wäre am besten. Und ja, ich nenne wirklich die Klasse und Mitglieder C, D und T (Constants / Debugging / Tag) - aus Gründen der Performance während des Tippens. ; -)

Andere Tipps

obfuscate mit Proguard als proguard Befehle hat, es zu benutzen, um herauszufiltern, wenn Sie Ihre proguard Config file..nice und einfach zu schreiben und es funktioniert

Es ist generell eine gute Praxis nicht enthält sie in Ihrer Distribution Code in irgendeiner Weise, da sie verarbeitet werden müssen, die gerade führt zu unnötigem Batterieverbrauch.

Sie könnten einen boolean in Ihrer Anwendung irgendwo auf Entwicklung oder Release-Version des Codes, um anzuzeigen, und haben eine Menge, wenn Blöcke für die Flagge überprüft und Ihren Log-Code ausgeführt wird oder nicht, aber dies ist nur führt zu Code aufblasen.

Sie sollten sie loswerden, wenn Sie nicht mehr benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top