ADB,即 Android Debug Bridge酷窥,它是 Android 開發(fā)/測試人員不可替代的強大工具咽安,也是 Android 設備玩家的好玩具。
注: 有部分命令的支持情況可能與 Android 系統(tǒng)版本及定制 ROM 的實現(xiàn)有關竖幔。
- [查看日志]
- [Android 日志]
- [按級別過濾日志]
- [按 tag 和級別過濾日志]
- [日志格式]
- [清空日志]
- [內核日志]
- [Android 日志]
查看日志
Android 系統(tǒng)的日志分為兩部分板乙,底層的 Linux 內核日志輸出到 /proc/kmsg,Android 的日志輸出到 /dev/log拳氢。
Android 日志
命令格式:
[adb] logcat [<option>] ... [<filter-spec>] ...
常用用法列舉如下:
按級別過濾日志
Android 的日志分為如下幾個優(yōu)先級(priority):
- V —— Verbose(最低募逞,輸出得最多)
- D —— Debug
- I —— Info
- W —— Warning
- E —— Error
- F —— Fatal
- S —— Silent(最高,啥也不輸出)
按某級別過濾日志則會將該級別及以上的日志輸出馋评。
比如放接,命令:
adb logcat *:W
會將 Warning、Error留特、Fatal 和 Silent 日志輸出纠脾。
(注: 在 macOS 下需要給 *:W
這樣以 *
作為 tag 的參數(shù)加雙引號,如 adb logcat "*:W"
蜕青,不然會報錯 no matches found: *:W
苟蹈。)
按 tag 和級別過濾日志
<filter-spec>
可以由多個 <tag>[:priority]
組成。
比如右核,命令:
adb logcat ActivityManager:I MyApp:D *:S
表示輸出 tag ActivityManager
的 Info 以上級別日志慧脱,輸出 tag MyApp
的 Debug 以上級別日志,及其它 tag 的 Silent 級別日志(即屏蔽其它 tag 日志)贺喝。
日志格式
可以用 adb logcat -v <format>
選項指定日志輸出格式菱鸥。
日志支持按以下幾種 <format>
:
-
brief
默認格式。格式為:
<priority>/<tag>(<pid>): <message>
示例:
D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
-
process
格式為:
<priority>(<pid>) <message>
示例:
D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)
-
tag
格式為:
<priority>/<tag>: <message>
示例:
D/HeadsetStateMachine: Disconnected process message: 10, size: 0
-
raw
格式為:
<message>
示例:
Disconnected process message: 10, size: 0
-
time
格式為:
<datetime> <priority>/<tag>(<pid>): <message>
示例:
08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
-
threadtime
格式為:
<datetime> <pid> <tid> <priority> <tag>: <message>
示例:
08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
-
long
格式為:
[ <datetime> <pid>:<tid> <priority>/<tag> ] <message>
示例:
[ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ] Disconnected process message: 10, size: 0
指定格式可與上面的過濾同時使用躏鱼。比如:
adb logcat -v long ActivityManager:I *:S
清空日志
adb logcat -c
內核日志
命令:
adb shell dmesg
輸出示例:
<6>[14201.684016] PM: noirq resume of devices complete after 0.982 msecs
<6>[14201.685525] PM: early resume of devices complete after 0.838 msecs
<6>[14201.753642] PM: resume of devices complete after 68.106 msecs
<4>[14201.755954] Restarting tasks ... done.
<6>[14201.771229] PM: suspend exit 2016-08-28 13:31:32.679217193 UTC
<6>[14201.872373] PM: suspend entry 2016-08-28 13:31:32.780363596 UTC
<6>[14201.872498] PM: Syncing filesystems ... done.
中括號里的 [14201.684016]
代表內核開始啟動后的時間氮采,單位為秒。
通過內核日志我們可以做一些事情染苛,比如衡量內核啟動時間鹊漠,在系統(tǒng)啟動完畢后的內核日志里找到 Freeing init memory
那一行前面的時間就是。