2013-03-06 10 views
11

documentazione Android (http://developer.android.com/reference/android/util/Log.html) dice:i registri di debug di Android sono davvero ridotti al runtime?

dettagliato dovrebbe mai essere compilato in un'applicazione, tranne durante lo sviluppo. I log di debug sono compilati ma eliminati in fase di esecuzione. I registri di errori, avvertenze e informazioni sono sempre conservati

Ho appena fatto un test. Nella mia attività ho scritto:

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")); 
} 

Ho esportato il mio progetto come file apk, quindi ho installato questo apk sul mio telefono. Ho eseguito questa applicazione sul mio telefono, poi ho guardato i registri. Lì ho visto che il test funzionale è stato chiamato tutte e cinque le volte e tutte e cinque le chiamate alle funzioni Log.something hanno comportato la scrittura del testo nei registri.

Quindi le chiamate Log.d sono davvero ridotte al runtime?

+0

In breve la risposta sembra essere no. L'argomento è ampiamente discusso qui http://stackoverflow.com/questions/2446248/remove-all-debug-logging-calls-before-publishing-are-there-tools-to-do-this/2466662#2466662 – gpasci

+0

Quindi c'è un bug nella documentazione? – user983447

risposta

6

Questo problema è stato segnalato here e una soluzione è stato fornito in ADT 17.0.0 in Mar 2012

aggiunto una funzione che consente di eseguire del codice solo in modalità di debug. Le build ora generano una classe chiamata BuildConfig contenente una costante DEBUG che viene automaticamente impostata in base al tipo di build. È possibile controllare la costante (BuildConfig.DEBUG) nel codice per eseguire le funzioni di debug-only.

11

No. Devi farlo da solo. È possibile rendere il proprio involucro Log.d come questo:

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

Questa è la risposta corretta, quindi per la cronaca la documentazione di Android è errata. In alternativa puoi anche usare 'Log.isLoggable (TAG, Log.DEBUG)' se vuoi abilitare i log al runtime piuttosto che fare affidamento sul tipo di build. – satur9nine

Problemi correlati