[TOC]
日志命令
adb logcat 查看日志
詳細內容可參見
ADB Usage Complete / ADB 用法大全
官方文檔Listing of logcat Command Options
他人整合 http://jiongbull.com/2016/03/17/adb%E5%91%BD%E4%BB%A4/
更多的 systemdump http://www.lxweimin.com/p/811741a2ad97
抓取崩潰日志
# 最近崩潰的棧日志,這個用于快速定位問題
adb shell dumpsys dropbox --print data_app_crash
# 復現bug 完整日志,先清空日志
adb logcat -c
# 存儲在當前目錄的 crash.log 中
adb logcat -v time > crash.log
# linux 系統可以使用 tee 一邊輸出一邊記錄
adb logcat -v time | tee crash.log
抓取 anr 日志
## root 過的設備
adb shell
cat /data/anr/traces.txt > /mnt/sdcard/0/traces.txt
exit
adb pull /mnt/sdcard/0/traces.txt .
# 注意某些機型可能文件名改過,需要自行判斷
## 未root
# windows 系統 寫入文件 bugreport.log
adb shell bugreport > bugreport.log
# linux 系統可以使用 tee 一邊輸出一邊記錄
adb shell bugreport | tee bugreport.log
adb wifi鏈接調試
# 開啟 tcpip 調試
adb tcpip 5555
# 主機執行
adb connect [手機IP]
應用相關
查看應用列表
adb shell pm list package
# has root
adb shell ls /data/data/
adb啟動/停止 應用程序
adb shell am start -n [packageName/StartActivity]
adb shell am force-stop [packageName]
端口映射
# 顯示所有(PC —> DEVICE)映射的端口連接列表
adb forward —list
# 映射端口連接(PC —> DEVICE)
adb forward (local) (remote)
adb forward tcp:6100 tcp:7100
# 映射端口連接,但是如果local已經映射了就會失敗
adb forward —no-rebind (local) (remote)
adb forward --no-rebind tcp:6100 tcp:7100
# 移除指定的映射端口連接
adb forward —remove tcp:6100
# 移除所有的映射端口連接
adb forward —remove-all
# 顯示所有來自設備的(DEVICE —> PC)映射的端口連接列表
adb reverse —list
# 反向映射端口連接(DEVICE —> PC)
adb reverse (remote) (local)
adb reverse tcp:7000 tcp:5000
# 如果local已經映射了就會失敗
adb reverse —no-rebind (remote) (local)
adb reverse --no-rebind tcp:7000 tcp:5000
# 移除指定的反向映射端口連接
adb reverse —remove tcp:7000
adb reverse —remove-all
應用安裝卸載
# 獲取apk的packagename 和 classname
aapt d badging <apkfile>
# 安裝apk
adb install <apkfile>
# 保留數據和緩存文件,重新安裝apk,
adb install -r <apkfile>
# 安裝apk到sd卡
adb install -s <apkfile>
# 卸載app
adb uninstall <package>
# 卸載app但保留數據和緩存文件
adb uninstall -k <package>
# 同時安裝包多個apk到設備上
adb install-multiple
adb install 參數
-
-l
鎖定應用 -
-r
替換已存在的應用 -
-t
允許安裝測試包 -
-s
安裝到sd卡中 -
-d
可以安裝低版本安裝包 -
-p
安裝部分應用 -
-g
授權所有運行時權限
應用狀態查看
# 查看進程列表
adb shell ps
# 查看指定進程狀態
adb shell ps -x [PID]
# 查看后臺services信息
adb shell service list
# 查看IO內存分區
adb shell cat /proc/iomem
調試查看
列出所有擁有JDWP端口進程的進程號
adb jdwp
查看系統性能
adb shell am start -W 包名/Activity
文件操作
# 查看所有存儲設備名
adb shell ls mnt
# 從本地復制文件到設備
adb push <local> <remote>
# 從設備復制文件到本地
adb pull <remote> <local>
# 列出目錄下的文件和文件夾,等同于dos中的dir命令
adb shell ls
# 進入文件夾,等同于dos中的cd 命令
adb shell cd <folder>
# 重命名文件
adb shell rename path/oldfilename path/newfilename
# 刪除system/avi.apk
adb shell rm /system/avi.apk
# 刪除文件夾及其下面所有文件
adb shell rm -r <folder>
# 移動文件
adb shell mv path/file newpath/file
# 設置文件權限
adb shell chmod 777 [filePath]
# 新建文件夾
adb shell mkdir -d path/foldelname
adb sync
把Android設備上/system
和/data
目錄中與主機目錄中不一致的內容同步到主機上。
使用前需要設置主機目錄地址的環境變量。
adb sync(未設置環境變量)
D:\Code\Git>adb sync
adb: Product directory not specified; use -p or define ANDROID_PRODUCT_OUT
set ANDROID_PRODUCT_OUT = (PATH)
D:\Code\Git>set ANDROID_PRODUCT_OUT = D:\Data\Android
adb sync(已設置環境變量)
D:\Code\Git>adb sync
syncing /system...
push: D:\Data\Android\system/app/WAPPushManager.apk -> /system/app/WAPPushManager.apk
文本操作
# 查看文件內容
adb shell cat <file>
# 查看文件的頭10行
adb shell head -n 10 <file>
# 查看文件的尾10行
adb shell tail -n 10 <file>
root權限操作
- 此操作需要root后的手機才可以執行
# 嘗試開啟root權限,adb連接會重置 成功會提示 restarting adbd as root
adb root
# 關閉root權限
adb unroot
# 重新掛載系統分區,使系統分區重新可寫 成功提示 remount succeeded
adb remount
# 重啟設備,進入recovery程序的sideload模式,需要root權限
adb reboot sideload
這樣就可以操作Android系統文件
調試環境下的dm-verity檢查
解鎖 system 分區用這個
關閉在調試環境下的dm-verity檢查
adb disable-verity
啟用在調試環境下的dm-verity檢查
adb enable-verity
系統項目
設備信息
# 完整設備信息
adb shell cat /system/build.prop
# 廠商信息
adb shell cat /system/build.prop | grep ro.product
環境變量
ADB_TRACE 指定打印調試信息,可以設置為以下列表中的值,用逗號隔開
adb、sockets、packets、rwx、usb、sync、sysdeps、transport和jdwp
ANDROID_SERIAL
指定要連接的設備,如果通過-s
指定了則該變量不起作用
ANDROID_LOG_TAGS
在使用logcat的情況下,只有這些標簽的調試信息才會打印
dumpsys
adb shell dumpsys wifi
adb shell dumpsys cpuinfo
可以dump當前運行的內容包括
編號 | 參數 |
---|---|
1 | SurfaceFlinger |
2 | accessibility |
3 | account |
4 | activity |
5 | alarm |
6 | appwidget |
7 | audio |
8 | backup |
9 | battery |
10 | batteryinfo |
11 | bluetooth |
12 | bluetooth_a2dp |
13 | clipboard |
14 | connectivity |
15 | content |
16 | cpuinfo |
17 | device_policy |
18 | devicestoragemonitor |
19 | diskstats |
20 | dropbox |
21 | entropy |
22 | ethernet |
23 | hardware |
24 | input_method |
25 | iphonesubinfo |
26 | isms |
27 | keybar |
28 | location |
29 | media.audio_flinger |
30 | media.audio_policy |
31 | media.camera |
32 | media.player |
33 | meminfo |
34 | mount |
35 | netsta |
設備狀態信息
# 查看設備cpu和內存占用情況
adb shell top
# 查看占用內存前6的app
adb shell top -m 6
# 刷新一次內存信息,然后返回
adb shell top -n 1
# MAC地址
adb shell cat /sys/class/net/wlan0/address
# CPU序列號
adb shell cat /proc/cpuinfo
備份
# 把設備的數據歸檔寫入文件中
adb backup
adb backup -f backup.ab -all
-
-f
如果沒有這個標識,數據將會寫入到當前目錄中的backup.ab文件中 -
-apk|-noapk
啟用|禁用備份.apk文件自己,默認是noapk -
-obb|-noobb
啟用|禁用備份應用關聯的apk擴展,默認是noobb -
-shared|-noshared
啟用|禁用備份設備共享存儲/SD中的內容,默認是noshared -
-all
備份所有安裝的應用 -
-system|-nosystem
決定-all是否包含系統應用,默認是包含系統應用 -
packages...
將要備份的應用列表,如果設置了-all或-shared標識,那么這個參數將是可選的
從歸檔的備份文件中恢復設備內容
adb restore
adb restore backup.ab
設備操作
# 返回所有應該包含在錯誤報告中的設備信息
adb bugreport
# 重啟
adb reboot
# 重啟刷機模式
adb reboot bootloader
# 重啟到恢復模式
adb reboot recovery