Android Logcat 抓取技巧教學,讓你輕鬆掌握:非開發人員也能懂的log抓取技巧!
前言
-
今天我想跟大家分享一些讓你輕鬆抓取Android log的技巧!
在開發過程中,常常會有這樣的問題:「有什麼方法可以快速抓log呢?」
「怎麼讓測試或其他非開發人員也能輕鬆抓到Android log呢?」
別擔心!我整理了一些簡單易懂的方法,希望能幫助你們更有效率地開發和測試。
快速抓取 Android log,從基本觀念開始!
-
要抓Android的log,可以使用logcat這個工具,不過需要注意的是logcat只會抓取系統內部的log
- 抓取整包log:使用指令 adb logcat 來抓取整包log,
可以透過指定篩選條件來只抓取特定的log,
詳細的篩選方法可以參考篩選log參考
- 查看各個buffer的大小:使用指令
adb logcat -g
來查看各個buffer的大小。 - 查看不同buffer內的log:除了主要的buffer之外,
還有其他的buffer可以查看,
例如radio、events、system等等,
可以使用
[adb] logcat [-b 'buffer name']
來查看特定的log,
其中<buffer_name>為要查看的buffer名稱。
例如:
main buffer log :
adb logcat -b main
events buffer log :
adb logcat -b events
以此類推
- 想了解各buffer區差異可參考官方文件 :查看備用日志緩衝區
Android log 抓取思路
需su權限
-
拉出 Kernel panic log : adb pull /sys/fs/pstore/console-ramoops
-
印出 Kernel log:adb shell cat /proc/kmsg (抓取當前那次的log、第二次呼叫同指令會從上次結束後的log後面開始顯示)
-
Linux kernel-ring buffer log : adb shell su dmesg
不需權限
- 拉出 ANR log : adb pull /data/anr
- 在 Android 4.1 之前,
開發者可以在 Manifest.xml 中添加 "READ_LOGS" 權限,
獲得此權限後可以取得需要 su 權限才能取得的 log。
但在 Android 4.1 之後,
Google 將 "READ_LOGS" 權限列為十大不良權限,
因此不再建議使用。可以參考 Google 開發者相關影片。
[google developer相關影片](https://www.youtube.com/watch?v=WDDgoxvQsrQ&t=1323s)
- 因此 Android > 4.1 時 在app內抓取log使用權限被變更為 `“signature|privileged”`
等同於 需要有 `系統簽名` 或
build image時包在特權資料夾`../priv-app`的app ([特許權限白名單](https://source.android.google.cn/devices/tech/config/perms-whitelist?hl=zh-cn))
才能取得該`READ_LOGS`權限
- 如果透過PC下指令:
`adb shell "pm grant <package name> android.permission.READ_LOGS && am force-stop <package name>" `
可以打開`READ_LOGS`權限 + 強制關閉app (因下完要重啟app才會生效)
要關閉權限則將`grant`改成`revoke`
之後再用`adb pull`拉出來
-
例如:app寫好後,用adb pull拉出來
adb pull /sdcard/Android/data/your.package.name/files/
- 透過寫好的shell直接小黑窗執行在背景抓log
- 這邊分享個簡易的寫法:
1. 如果是需要開發人員要客製的話就是要從頭到尾自己了解上面這份code
-
但若是非開發人員直接複製上面code到txt 或空白檔案中
首先先確認電腦環境中有adb
修改packageName 成指定的app包名
配置adbPath 改成你
adb
的系統路徑(如果你要給非開發人員用 也可以配置./adb 在你同個資料夾的路徑 讓電腦沒裝
adb
的人,下載含有adb
的就能執行) -
(optional) 可以自定義輸出的
log file name
也可以自行帶入時間碼來區分等等
就開始抓囉!