引言
本文基于Android官方文檔, 以及個人工作的使用經驗, 總結下adb的常用用法, 備忘.
1, adb簡介
adb全名Andorid Debug Bridge. 顧名思義, 這是一個Debug工具.
然而, 為何稱之為Bridge呢? 因為adb是一個標準的CS結構的工具, 是要連接開發電腦和你的調試手機的.包含如下幾個部分:
- Client端, 運行在開發機器中, 即你的開發PC機. 用來發送adb命令.
- Deamon守護進程, 運行在調試設備中, 即的調試手機或模擬器.
- Server端, 作為一個后臺進程運行在開發機器中, 即你的開發PC機. 用來管理PC中的Client端和手機的Deamon之間的通信.
2, 常用用法
2.1 adb devices
列舉當前連接的調試設備
$ adb devices
List of devices attached
DU2SSE1467010378 device
2.2 adb logcat
打印log信息
指令 | 說明 | 備注 |
---|---|---|
adb logcat | 打印log | / |
adb logcat -c | 清除手機的log buffer | 有些手機權限控制, 不支持. |
adb logcat -b <buffer> | 打印指定buffer的log信息 | buffer有: main(主log區,默認), events(事件相關的log), radio(射頻, telephony相關的log) |
adb logcat -v <format> | 格式化輸出log | 常用的用adb logcat -v time顯示時間 |
adb logcat -f <filename> | 輸出log到指定文件 |
2.3 adb install/uninstall
安裝卸載apk
// 安裝apk時指定apk file路徑
$ adb install ~/Downloads/mobileqq_android.apk
[100%] /data/local/tmp/mobileqq_android.apk
pkg: /data/local/tmp/mobileqq_android.apk
Success
// 卸載apk時指定包名
$ adb uninstall com.tencent.mobileqq
Success
2.4 adb pull/push
調試設備和開發PC之間拷貝文件.
// 拷貝本地文件到調試設備中
$ adb push ~/temp/GithubApp.trace /sdcard/
[100%] /sdcard/GithubApp.trace
// 從調試設備中拷貝文件到本地
$ adb pull /sdcard/GithubApp.trace ~/
[100%] /sdcard/GithubApp.trace
2.5 adb start/kill-server
啟動/殺死adb簡介中提到的Server端進程.
由于adb并不穩定, 有時候莫名的問題掉線時, 可以先kill-server, 然后start-server來確保Server進程啟動. 往往可以解決問題.
2.5 adb shell
進入調試設備的shell界面, 此時可以使用調試設備中的很多指令. 下文高階用法中很多就是.
$ adb shell
shell@hwH60:/ $
3, 高階用法
3.1 adb connect/disconnect
通過wifi進行遠程連接手機進行調試的.
https://developer.android.com/studio/command-line/adb.html#wireless
需先連上usb模式, 開啟遠程調試模式:
$ adb tcpip 5555
3.2 adb shell am
am即activity manager.
該命令用來執行一些系統動作, 例如啟動指定activity, 結束進程, 發送廣播, 更改屏幕屬性等. 調試利器.
指令 | 說明 | 備注 |
---|---|---|
start <Intent> | 根據intent指向啟動Activity | Intent可以是顯示的指向activity, 也可以是ACTION方式, 并且可以添加flag, data等參數信息. |
startservice <Intent> | 啟動Service | 可以添加flag, data等參數信息. |
broadcast <Intent> | 發送廣播 | 可以添加flag, data等參數信息. |
monitor | 啟動一個Crash和ANR的監聽器 | 如有Crash或ANR會在控制臺輸出相關信息. |
force-stop <Package> | 強制停止該包相關的一切 | 傳入package name. |
kill <Package> | 殺死該包相關的所有進程 | 傳入package name. |
kill-all | 殺死所有后臺進程 | |
display-size WxH | 改變顯示的分辨率 | 例如adb shell am display-size 1280x720, 手機可能不支持. |
display-density <dpi> | 改變顯示的density | 例如adb shell am display-density 320, 手機可能不支持. |
3.3 adb shell pm
pm即package manager.
用來執行package相關的操作, 例如安裝卸載, 查詢系統的安裝包等.
指令 | 說明 | 備注 |
---|---|---|
list packages <Filter> | 列出滿足filter條件的所有包 | |
list permissions <Group> | 列出該Group的所有權限 | |
list features | 查看系統支持哪些feature | 例如藍牙, wifi, 攝像頭等. |
install <Path>/uninstall <Package> | 安裝卸載 | |
clear <Package> | 清除應用數據 |
3.4 adb shell screencap
截屏, 比截屏快捷鍵更加方便快捷.
$ adb shell screencap /sdcard/screen.png
$ adb pull /sdcard/screen.png ~/temp
[100%] /sdcard/screen.png
3.5 adb shell screenrecord
錄屏, 做demo的話, 可以很方便的用這個命名錄制視頻, 然后借助工具將其轉換成gif圖, 超贊. 如下:
Android4.4及以上系統可用.
2.5 adb shell dumpsys
強大的dump工具, 可以輸出很多系統信息. 例如window, activity, task/back stack信息, wifi信息等.
探索Activity之launchMode和探索Activity之啟動Intent flag和Affinity就是用adb shell dumpsys activity來輸出task信息的.
常用dumpsys:
指令 | 說明 | 備注 | 細分參數 |
---|---|---|---|
activity | 輸出app組件相關信息 | 還可以用細分參數獲得單項內容, 下同. 例如adb shell dumpsys activity activities來獲取activity task/back stack信息. | activites, service, providers, intents, broadcasts, processes |
alarm | 輸出當前系統的alarm信息 | / | / |
cpuinfo | 輸出當前的CPU使用情況 | / | / |
diskstats | 輸出當前的磁盤使用狀態 | / | / |
batterystats | 電池使用信息 | / | / |
package | package相關信息, 相當于pm功能的集合 | 輸出諸如libs, features, packages等信息 | / |
meminfo | 輸出每個App的內存使用和系統內存狀態 | 可以指定包名, 例如adb shell dumpsys meminfo com.anly.githubapp | / |
window | 輸出當前窗口相關信息 | / | policy, animator, tokens, windows |