2012-04-23 178 views
8

是否可以在未植根的設備上設置日誌級別? 所以我想以某種方式更改設備日誌級別以「調試」。這是可以做到的嗎?設置Android日誌級別

因爲它沒有紮根我不認爲setprop會工作。 我也無法更改local.prop文件,因爲我沒有權限這樣做。

除了可能很幸運,並找到一個隱藏的菜單,其中有日誌級別。 有沒有辦法讓我以其他方式增強日誌級別?

感謝您的幫助。

+0

什麼「設備日誌級別」?而setprop不限於紮根電話AFAIK(減去只讀屬性) – zapl 2012-04-23 22:41:33

+0

什麼,我注意到是在非根深蒂固的設備有一些要麼從Android系統屬性丟失或一個不允許使用setprop來修改這些屬性的屬性。換句話說,setprop命令可以正常工作,但更改不會粘住。因此,有沒有另一種方法來設置這個特定的Android設備上的日誌級別?總而言之,如果一個普通的Android設備的日誌級別設置爲「信息」,我可以更改這些日誌級別來說「調試」? – 2012-04-24 04:02:58

回答

12

setprop

  • ,直到你重新啓動你的設備,甚至紮根電話是暫時的。
  • 如果將它們寫入local.prop,則只有在根目錄的電話上纔可以通過重新啓動來保留屬性。
  • 某些屬性是隻讀的,只能在更改某些init文件時才能更改。根植手機甚至不可能。每個設備(或固件)可以具有不同的屬性組。紮根的手機不會自動獲得更多。

記錄等級:

  • 如果打印記錄的代碼表示Log.d()那麼這將是在「調試」水平,你不能改變,除非你改變代碼並重新編譯。如果您執行Log.?而不考慮級別,則沒有任何內容會隱藏日誌消息。
  • 如果您有固件版本構建,Android框架會隱藏一些日誌消息。要顯示那些你需要重新編譯你的固件作爲調試版本。沒有機會讓他們在固定電話上展示。
  • 某些消息由代碼中的局部變量控制,如if (LOCAL_LOGV) Log.v(... - 您需要在此處更改代碼以查看這些代碼。
  • 某些消息由Config.LOGV(=始終爲false)控制,請參閱Config。沒有辦法改變這裏的破壞行爲。你需要重新編譯。
  • 其他一些日誌消息被隱藏,直到您啓用一個屬性:

例如

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

如果你做adb shell setprop log.tag.SQLiteCompiledSql VERBOSE你應該看到這些消息彈出。 Log#isLoggable()

沒有我知道的全局日誌級別。

+0

首先感謝411.我真的很感激它。我想是否有辦法找出日誌級別設置爲什麼?對於設備上的特定應用,例如製造商用來調用UI菜單的東西。然後在該UI菜單調用上使用setprop將其設置爲冗長?最後使用logcat來查看特定UI菜單的所有錯誤條件? – 2012-04-24 12:28:17

+0

如果您可以訪問應用程序的源代碼(或APK + A [反編譯](http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode)),那麼你可以檢查是否有是可以啓用例如日誌記錄通過'setprop' - 你甚至可以嘗試用[apktool](http://code.google.com/p/dex2jar/wiki/ModifyApkWithDexTool)編輯源代碼並自己添加一些日誌記錄。或者您可以使用DDMS(您可能需要使用apktool創建應用程序[debuggable](http://developer.android.com/guide/topics/manifest/application-element.html#debug))。但是,即使我能夠做到這一點,但沒有通用的方法來啓用日誌 – zapl 2012-04-24 12:56:49

+0

,因爲它沒有根,所以我無法在設備中獲得該應用程序。我知道即將到來的情況下,製造商將設備的調試日誌級別留在了設備上,以防出現網絡現場測試的麻煩,並且我假設他們在啓用日誌記錄功能時使用log.d,因爲它只是啓用了該調試級別。我想即使檢查狀態以查看日誌級別是否可用,除非我像你所說的那樣進入每個apk文件,並單獨檢查哪一個文件會很難進行檢查,我的運氣會很不好。 – 2012-04-24 13:03:16

2

讓我提出的標準日誌類微小的更換(我是作者)

https://github.com/zserge/log

這是向後兼容的,所以你只需要修改你的進口。然後,你可以通過Log.level(Log.D)Log.level(Log.W)等爲您的應用程序的最小日誌級別,或者您也可以使用Log.useLog(false)禁用日誌。無需修改現有的日誌記錄代碼。

儘管它的體積小本記錄儀的工作原理與兩者JVM和Android,可以讓你跳過「標籤」參數,簡化了用逗號或使用格式字符串分隔的多個值的記錄。所以它非常方便,易於遷移,並且只會在您的APK大小上增加〜4千字節。