2012-04-23 16 views
8

È possibile impostare i livelli di registro su un dispositivo che non è rootato? quindi voglio cambiare il livello del registro del dispositivo in qualche modo su "debug". è qualcosa che può essere fatto?Impostazione dei livelli di registro Android

poiché non è radicato non penso che setprop funzionerà. Non posso anche cambiare il file local.prop poiché non ho i permessi per farlo.

altro che magari essere fortunato e trovare un menu nascosto con i livelli di registro. c'è un modo per migliorare il livello del registro in qualche altro modo?

grazie per l'aiuto.

+0

quale "livello di registrazione del dispositivo"? E setprop non è limitato ai telefoni rooted afaik (meno le proprietà di sola lettura) – zapl

+0

quello che sto notando è su dispositivi non rooted ci sono proprietà che mancano dalle proprietà del sistema Android o una non è permesso usare setprop per modificare quelle proprietà . in altre parole, il comando setprop funziona ma i cambiamenti non si attaccano. Quindi, c'è un altro modo per impostare il livello di registro su questo particolare dispositivo Android? tutto sommato, se un normale dispositivo Android ha livelli di registro impostati per dire "informazioni" posso cambiare quei livelli di registro per dire "debug"? –

risposta

12

setprop:

  • è temporaneo fino a quando si riavvia il dispositivo, anche sui telefoni radicati.
  • è possibile mantenere le proprietà tramite i riavvii se li si scrive in local.prop, che è possibile solo sui telefoni rooted.
  • alcune proprietà sono di sola lettura e possono essere modificate solo se si modificano alcuni file di init. Potrebbe essere addirittura impossibile su telefoni con root.
  • ogni dispositivo (o firmware) può avere un diverso insieme di proprietà. Un telefono rooted non avrebbe automaticamente più.

Loglevels:

  • Se il codice che consente di stampare il registro dice Log.d() allora sarà il livello di "debug" e non si può cambiare la situazione se non si cambia il codice e ricompilarlo. Non c'è nulla che nasconda i messaggi di registro se si esegue un Log.? indipendentemente dal livello.
  • l'infrastruttura Android nasconde alcuni messaggi di registro se si dispone di una versione del firmware. Per mostrare quelli di cui hai bisogno per ricompilare il tuo firmware come build di debug. Nessuna possibilità di ottenere quelli da mostrare su un telefono rooted.
  • alcuni messaggi sono controllati da una variabile locale nel codice come if (LOCAL_LOGV) Log.v(... - è necessario modificare il codice qui per vedere anche quelli.
  • alcuni messaggi sono controllati da Config.LOGV (= sempre false) vedere Config. Neanche un modo per cambiare il comportamento rotto qui. Hai bisogno di ricompilare.
  • alcuni altri LogMessages sono nascosti fino a quando si attiva un immobile:

esempio

public static final boolean DEBUG_SQL_CACHE = 
Log.isLoggable("SQLiteCompiledSql", Log.VERBOSE); 

// somewhere in code 
if (SQLiteDebug.DEBUG_SQL_CACHE) { 
    Log.d(TAG, "secret message!"); 
} 

se lo fai adb shell setprop log.tag.SQLiteCompiledSql VERBOSE si dovrebbe vedere quei messaggi popping up. Log#isLoggable()

Non esiste un loglevel globale che conosco.

+0

prima di tutto grazie per il 411. Lo apprezzo davvero. Immagino ci sia un modo per scoprire a cosa è impostato il livello di log? per una particolare applicazione sul dispositivo, ad esempio ciò che il produttore usa per chiamare il menu dell'interfaccia utente. Quindi usa setprop su quella chiamata al menu dell'interfaccia utente per impostarla su verbose? finalmente usando logcat per poi vedere tutte le condizioni di errore per quel particolare menu dell'interfaccia utente? –

+0

Se hai accesso al codice sorgente dell'app (o all'apk + a [decompiler] (http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode), puoi controllare se è la registrazione che può essere abilitata ad es tramite 'setprop' - Potresti anche provare a modificare il codice sorgente con [apktool] (http://code.google.com/p/dex2jar/wiki/ModifyApkWithDexTool) e aggiungere un po 'di log. Oppure potresti usare DDMS (potrebbe essere necessario rendere l'app [debuggable] (http://developer.android.com/guide/topics/manifest/application-element.html#debug) con apktool). Ma non esiste un approccio generale per abilitare il registro – zapl

+0

anche se sono stato in grado di farlo non ho potuto ottenere quell'app nel dispositivo dal momento che non è stato rootato. so già che i produttori lasciano i livelli di registro di debug sul proprio dispositivo per problemi di test sul campo della rete e presumo dal momento che usano log.d dappertutto quando abilitano la registrazione è solo questo livello di debug abilitato. Immagino che sarei sfortunato in termini di controllo dello stato anche per vedere quale livello di registri è stato reso disponibile a meno che non entri in ogni apk come hai detto tu e lo controlli individualmente, il che farebbe schifo. –

2

Vorrei proporre un piccolo sostituto per la classe di log standard (Sono l'autore)

https://github.com/zserge/log

E 'compatibile, quindi è sufficiente modificare le importazioni.Quindi puoi impostare il livello di registro minimo per la tua app tramite Log.level(Log.D) o Log.level(Log.W), oppure puoi disabilitare i registri usando Log.useLog(false). Non è necessario modificare il codice di registrazione esistente.

Nonostante le ridotte dimensioni, questo logger funziona con entrambi, JVM e Android, consente di saltare il parametro "tag", semplifica la registrazione di più valori separati da virgole o utilizzando una stringa di formato. Quindi è davvero comodo, facile da migrare e aggiunge solo ~ 4 kilobyte alle dimensioni dell'APK.

Problemi correlati