2013-03-06 7 views
11

Android Dokumentation (http://developer.android.com/reference/android/util/Log.html) sagt:Sind die Debug-Logs von Android zur Laufzeit wirklich gelöscht?

Ausführlich sollte nie außer während der Entwicklung in eine Anwendung kompiliert werden. Debug-Protokolle werden zur Laufzeit kompiliert, aber entfernt. Fehler-, Warn- und Info-Logs werden immer gehalten

Ich habe gerade einen Test gemacht. In meiner Tätigkeit schrieb ich:

private static String test(String what) { 
    Log.e("test", "I am called with argument: " + what); 
    return what; 
} 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Log.v("test", "log level: " + test("v")); 
    Log.d("test", "log level: " + test("d")); 
    Log.i("test", "log level: " + test("i")); 
    Log.w("test", "log level: " + test("w")); 
    Log.e("test", "log level: " + test("e")); 
} 

ich mein Projekt als apk-Datei exportiert, dann installierte ich diese apk auf meinem Handy. Ich habe diese Anwendung auf meinem Handy ausgeführt, dann habe ich mir Protokolle angeschaut. Dort sah ich, dass der Funktionstest alle fünf Mal aufgerufen wurde und alle fünf Aufrufe von Log.Something-Funktionen dazu führten, dass der Text in Protokolle geschrieben wurde.

So sind Log.d-Aufrufe zur Laufzeit tatsächlich abgestreift?

+0

Kurz gesagt erreicht die Antwort nein zu sein scheint. Das Thema wird hier ausführlich besprochen http://stackoverflow.com/questions/2446248/remove-all-debug-logging-calls-before-publishing-are-there-tools-to-do-this/2466662#2466662 – gpasci

+0

So ist ein Fehler in der Dokumentation? – user983447

Antwort

6

Dieses Problem wurde here berichtet und es wurde eine Lösung in ADT 17.0.0 in Mar 2012

Added eine Funktion zur Verfügung gestellt, die Sie einige Code laufen zu lassen nur im Debug-Modus. Builds generieren jetzt eine Klasse namens BuildConfig, die eine DEBUG-Konstante enthält, die automatisch entsprechend Ihrem Buildtyp festgelegt wird. Sie können die Konstante (BuildConfig.DEBUG) in Ihrem Code überprüfen, um Debug-only-Funktionen auszuführen.

11

Nein. Sie müssen dies selbst tun. Sie können Ihre eigenen Log.d Wrapper wie diese machen:

public static void debug(String tag, String msg) { 
    if (BuildConfig.DEBUG) { 
     Log.d(tag, msg); 
    } 
} 
+1

Dies ist die richtige Antwort, daher ist die Android-Dokumentation falsch. Alternativ können Sie auch 'Log.isLoggable (TAG, Log.DEBUG) 'verwenden, wenn Sie die Protokolle zur Laufzeit aktivieren möchten und nicht auf den Buildtyp angewiesen sind. – satur9nine

Verwandte Themen