我們在接觸一個新的項目或入職新公司接手項目,特別是大型項目,對項目不熟悉,有些小伙伴經(jīng)常去找同事幫忙找這個頁面對應(yīng)是那個Activity或Fragment時,如果是長時間去問這些問題,會大量浪費同事的時間,同時對我們自己的成長不是很好。我們要學(xué)會怎么去找切入口。下面分享自己在日常開發(fā)使用的adb命令(基于windows平臺),我平時怎么快速定位頁面對應(yīng)的Activity或Fragment,打印日志信息也很關(guān)鍵的實戰(zhàn)所用到的,希望幫到大家。
ADB查看APP的常用命令
查看當(dāng)前界面Activity:
adb shell "dumpsys activity top | grep ACTIVITY | tail -n 1"
- dumpsys activity top :打印頂層Activity信息
- grep ACTIVITY:從上個命令結(jié)果中過濾出Activity相關(guān)信息
- tail -n 1:從上一步過濾結(jié)果中繼續(xù)過濾出最后一條記錄,也就是當(dāng)前界面(頂層top)activity
查看當(dāng)前界面Fragment:
adb shell "dumpsys activity top | grep '#0: ' | tail -n 1"
或adb shell "dumpsys activity top | grep '#[0-9]: ' | tail -n 1"
- grep '#0: ' : 當(dāng)前第一個Fragment
如果不知道一個Activity里有幾個Fragment,使用這命令,Activity信息棧里顯示有那些相關(guān)的Fragment
adb shell dumpsys activity top
| 命令 | 描述 |
|---|---|
| adb shell ps | 查看進(jìn)程 |
| adb shell dumpsys activity | 獲取當(dāng)前 Android 系統(tǒng) Activity 棧中 Activity 信息 |
| adb shell dumpsys activity top | 獲取當(dāng)前 Android 系統(tǒng) 中與用戶交互的 Activity 的詳細(xì)信息 |
| adb shell dumpsys meminfo 應(yīng)用包名 | 查看應(yīng)用的內(nèi)存使用情況 |
| adb shell dumpsys package 應(yīng)用包名 | 獲取手機(jī)里面某個 apk 的應(yīng)用信息、版本信息 |
| adb shell pm list package -3 | 列出所有的應(yīng)用的包名 (-s:列出系統(tǒng)應(yīng)用 -3:列出第三方應(yīng)用 -f:列出應(yīng)用包名及對應(yīng)的apk名及存放位置 -i:列出應(yīng)用包名及其安裝來源) |
| adb shell dumpsys activity activities | 顯示當(dāng)前所有在運(yùn)行的任務(wù)棧,并可查看棧中所有的 Activity 的列表 |
| adb shell wm size | 手機(jī)屏幕分辨率 |
| adb shell wm density | 手機(jī)屏幕密度 |
| adb shell getprop ro.product.model | 查看設(shè)備型號 |
獲取連接的設(shè)備列表及設(shè)備狀態(tài)
adb devices
安裝APK
adb install path_to_apk
-l向前鎖定應(yīng)用
adb install -l your.apk #forward lock application
-r替換已存在應(yīng)用
adb install -r test.apk #replace existing application
-t測試package標(biāo)志
adb install -t test.apk #allow test packages
-s將應(yīng)用安裝到sdcard
adb install -s test.apk #install application on sdcard
-d忽略版本號安裝apk
adb install -d test.apk #allow version code downgrade
-p部分安裝apk標(biāo)志
- path_to_apk:指apk的絕對路徑
卸載 APK
adb uninstall 應(yīng)用包名
//使用-k參數(shù):保留安裝包的數(shù)據(jù)和緩存目錄
adb uninstall -k 應(yīng)用包名
Logcat常用命令
捕捉手機(jī)里已經(jīng)發(fā)生過的崩潰日志,bugreport是支持所有手機(jī)日志信息
D:\bugreport>adb bugreport > 123.txt
輸出到指定目錄到123.txt文件(過程需要等待幾分鐘時間),會down下一個所有日志的壓縮包。
在此目錄下輸入命令:findstr "FATAL EXCEPTION" .\** 找異常所有的對應(yīng)文件,然后打開對應(yīng)的文件,然后全文搜索FATAL EXCEPTION,就可以找出問題所在。
查看命令幫助, 查看一下一些簡單的數(shù)據(jù)格式
adb logcat --help
使用命令adb logcat的打印:從上而下,優(yōu)先級最高
V - Verbose(lowest priority:優(yōu)先級最低,輸出得最多)
D - Debug
I - Info
W - Warning
E - Error
F - Fatal
S - Silent(highest priority,on which nothing is ever printed:優(yōu)先級最高,啥也不輸出)
清除緩存信息
adb logcat -c
- 最好的做法的先使用-c清除之前的日志信息,再觸發(fā)事件,查看最近的日志信息。
使用tag以后級別失效的原因是沒有加上*:S。不加靜默所有其他日志的選項就會把其他日志都輸出。
在developers文檔有介紹 Logcat 命令行工具 | Android 開發(fā)者 | Android Developers (google.cn)
打印優(yōu)先級為Error以上的日志信息。
adb logcat *:E
- *表示任何的Tag
- E表示優(yōu)先級
顯示所有優(yōu)先級Warning以上的日志
adb logcat *:W *:S
打印時間和優(yōu)先級為Error以上的日志信息:
adb logcat -v time *:E *:S
把日志信息保存到電腦上D盤log.txt文件上
adb logcat -v time *:E *:S > D:\log.txt
如果需要精準(zhǔn)到某他APP上,則在其后面添加上 " | findstr app進(jìn)程ID"
注意:
Window環(huán)境:findstr
Mac或Linux環(huán)境:grep
打印某個APP下,且tag為tagName的info級別以上的信息
adb logcat TagName:I *:S | findstr app進(jìn)程ID
打印某個APP的某個Tag的logcat信息(級別從E到S)
adb logcat TagName:E *:S | findstr app進(jìn)程ID
打印某個APP的某些Tag的logcat信息(級別從E到S)
adb logcat TagName:E Tag:E *:S | findstr app進(jìn)程ID