2012-04-23 15 views
8

Czy można ustawić poziomy rejestrów na urządzeniu, które nie jest zrootowane? więc chcę jakoś zmienić poziom logu urządzenia na "debugowanie". czy to jest coś, co można zrobić?Ustawianie poziomów logowania do systemu Android

ponieważ nie jest ukorzeniony i nie sądzę, że będzie działał. Nie można również zmienić pliku local.prop, ponieważ nie mam do tego uprawnień.

inne niż może mieć szczęście i znalezienie ukrytego menu, które zawiera poziomy rejestrów. Czy jest jakiś sposób, aby poprawić poziom logowania w inny sposób?

dzięki za pomoc.

+0

co "poziom logu urządzenia"? A setprop nie jest ograniczony do zrootowanych telefonów afaik (minus właściwości tylko do odczytu) – zapl

+0

co zauważam na urządzeniach nierootowanych są właściwości, których brakuje w właściwościach systemu Android lub nie wolno używać funkcji SetProp do modyfikowania tych właściwości . innymi słowy, polecenie setprop działa, ale zmiany nie przylegają. Czy istnieje inny sposób na ustawienie poziomu logu na tym urządzeniu z Androidem? w sumie, jeśli normalne urządzenie z Androidem ma ustawione poziomy log mówiące "info", czy mogę zmienić te poziomy logów, aby powiedzieć "debugowanie"? –

Odpowiedz

12

setprop:

  • jest tymczasowe, dopóki nie ponowne uruchomienie urządzenia nawet na zakorzenione komórkowych.
  • Możesz zachować właściwości przez ponowne uruchomienie, jeśli zapiszesz je w local.prop, co jest możliwe tylko na telefonach zrootowanych.
  • niektóre właściwości są tylko do odczytu i można je zmienić tylko w przypadku zmiany niektórych plików init. To może być niemożliwe nawet na zrootowanych telefonach.
  • każde urządzenie (lub oprogramowanie układowe) może mieć inny zestaw właściwości. Zrootowany telefon nie miałby automatycznie więcej.

poziomach logowania:

  • Jeśli kod, który drukuje dziennik mówi Log.d() to będzie na poziomie „debug” i nie można tego zmienić, chyba że zmiany kodu i skompilować go. Nie ma nic, co ukrywa komunikaty dziennika, jeśli wykonasz Log.? niezależnie od poziomu.
  • system Android ukrywa niektóre komunikaty dziennika, jeśli posiadasz kompilację wydania swojego oprogramowania układowego. Aby pokazać te, które wymagają ponownej kompilacji oprogramowania układowego jako kompilacji debugowania. Nie ma szansy, aby pokazać je na zrootowanym telefonie.
  • niektóre wiadomości są kontrolowane przez zmienną lokalną w kodzie takim jak if (LOCAL_LOGV) Log.v(... - musisz zmienić kod tutaj, aby je również wyświetlić.
  • niektóre wiadomości są kontrolowane przez Config.LOGV (= zawsze false) patrz Config. Nie ma mowy o zmianie tutaj zepsutego zachowania. Musisz przekompilować.
  • inne logmessages ukryte dopóki nie włączysz właściwość:

przykład

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

jeśli nie adb shell setprop log.tag.SQLiteCompiledSql VERBOSE powinieneś zobaczyć te komunikaty pojawiały się. Log#isLoggable()

Nie ma globalnego protokołu, którego znam.

+0

przede wszystkim dziękuję za 411. Naprawdę to doceniam. Chyba jest jakiś sposób, aby dowiedzieć się, jaki poziom logu jest ustawiony? dla konkretnej aplikacji na urządzeniu, na przykład do czego służy producent, aby wywołać menu UI. Następnie użyj polecenia setprop do wywołania menu interfejsu użytkownika, aby ustawić go na verbose? wreszcie używając logcat, aby zobaczyć wszystkie warunki błędu dla tego konkretnego menu UI? –

+0

Jeśli masz dostęp do kodu źródłowego aplikacji (lub apk + a [dekompilatora] (http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode)), możesz sprawdzić, czy to rejestrowanie, które można włączyć np poprzez 'setprop' - Możesz nawet spróbować edytować kod źródłowy za pomocą [apktool] (http://code.google.com/p/dex2jar/wiki/ModifyApkWithDexTool) i dodać własne rejestrowanie. Lub możesz użyć DDMS (może być konieczne zrobienie aplikacji [debuggable] (http://developer.android.com/guide/topics/manifest/application-element.html#debug) za pomocą apktoola). Ale nie ma ogólnego podejścia do włączania logu – zapl

+0

nawet, gdybym był w stanie to zrobić, nie mogłem dostać tej aplikacji na urządzeniu, ponieważ nie jest ona zrootowana. Wiem, że w niektórych przypadkach producenci opuszczają poziomy dzienników debugowania na swoich urządzeniach w celu problemów z testowaniem sieci w terenie i zakładam, że ponieważ używają log.d wszędzie, gdy umożliwiają rejestrowanie, to właśnie włączony jest ten poziom debugowania. myślę, że byłoby mi niefortunnie jeśli chodzi o sprawdzenie stanu, żeby zobaczyć, jaki poziom dzienników jest dostępny, chyba że wchodzę w każdy apk, tak jak powiedziałeś, i sprawdzasz to indywidualnie, co byłoby ciężko ssać. –

2

Pozwól sugerują niewielką zamiennik dla standardowej klasy dziennika (jestem autorem)

https://github.com/zserge/log

Jest kompatybilny wstecz, więc trzeba tylko zmodyfikować importu.Następnie możesz ustawić minimalny poziom rejestrowania dla swojej aplikacji przez Log.level(Log.D) lub Log.level(Log.W) itd. Możesz też wyłączyć dzienniki za pomocą Log.useLog(false). Nie trzeba modyfikować istniejącego kodu logowania.

Pomimo niewielkich rozmiarów rejestrator ten współpracuje zarówno z JVM, jak i Androidem, pozwala pominąć parametr "tag", upraszczając rejestrowanie wielu wartości oddzielonych przecinkami lub używając ciągu formatów. Jest to bardzo wygodne, łatwe do przeniesienia i dodaje tylko około 4 kilobajtów do rozmiaru pliku APK.

Powiązane problemy