若是想要調試Android系統裏的應用,通常的方式是手動經過jwdp attach到指定應用的虛擬機進行調試,這種方式很費事費力。除此之外,想要拷貝修改文件,查看系統信息等等,都不是很方便,好在系統給咱們提供了一個很好的工具。shell
adb (Android Debug Bridge) 全稱安卓調試橋,是一個集調試應用、操做系統內文件、查看系統/應用相關信息於一身的開發工具。緩存
adb和安卓系統中的系統服務同樣,一樣採用了CS (client-server) 的架構。其內部主要包含三個部分: adb client、adb server和adbd
。其中,bash
adb client
: 運行於PC上,提供PC端運行的命令,好比咱們常常調用的adb shell。adb server
: 一樣運行於PC上,做爲後臺進程,負責client與手機/模擬器中的守護進程(daemon)
的socket通訊,正如其名像一座橋同樣。adbd (adb daemon)
: 運行於手機/模擬器,做爲系統啓動後的守護進程若是咱們要調試的斷點很靠前,好比在Application的onCreate方法中,以致於不能足夠快的將進程設置爲debug模式,此時可使用adb命令解決該問題架構
在應用未啓動時,輸入如下命令後點擊app啓動app
adb shell am set-debug-app -w <your-app-package-name>
複製代碼
若是不想每次都運行該命令才能開始調試,能夠加上參數socket
adb shell am set-debug-app -w --persistent <your-app-package-name>
複製代碼
使用此參數,記得調試完成後要關閉tcp
adb shell am clear-debug-app
複製代碼
正由於adb這種cs架構,因此adb能夠進行無線調試,甚至咱們能夠在雲測平臺遠程調試雲測手機。工具
adb tcpip <port> 例如5555
複製代碼
adb connect <device-ip-address>:<port>
複製代碼
有時候adb運行該命令會報鏈接錯誤,這個時候能夠嘗試如下命令開發工具
adb kill-server
複製代碼
adb start-server
複製代碼
5.Android端開啓adbd(須要root)ui
su
setprop service.adb.tcp.port 5555
start adbd // 若是失敗,則先進行stop adbd
複製代碼
adb shell pm list packages
複製代碼
參數 | 顯示列表 |
---|---|
-f | 顯示應用關聯的 apk 文件 |
-s | 只顯示系統應用 |
-3 | 只顯示第三方應用 |
adb install <path_to_apk>
複製代碼
參數 | 含義 |
---|---|
-r | 容許覆蓋安裝 |
-d | 容許降級覆蓋安裝 |
-g | 授予全部運行時權限 |
adb uninstall [-k] <packagename>
複製代碼
參數-k:表示卸載應用但保留數據和緩存目錄
adb shell pm clear <packagename>
複製代碼
此操做在應用內是沒法調用的,除非root.
若是僅想刪除應用數據而保留用戶數據,能夠嘗試使用(須要root), adb shell su -c "rm -rf /data/data/<app's package>/cache/*"
若是是debug包,可使用run-as
命令在非root狀況下刪除數據, adb shell run-as <app's package> "rm -rf /data/data/<app's package>/cache/*"
adb shell dumpsys activity top
複製代碼
此方法一般用於很方便地定位activity類的名稱,使用頻率很高
adb shell dumpsys activity services [<packagename>]
複製代碼
adb shell dumpsys package <packagename>
複製代碼
adb shell ifconfig
複製代碼
adb shell cat /proc/cpuinfo
複製代碼
adb shell cat /proc/meminfo
複製代碼
截圖並保存在當前文件目錄下,很是實用
adb exec-out screencap -p > sc.png
複製代碼
若是常常須要使到截圖功能,能夠考慮寫shell腳本,一個簡單的實現方式以下,
snap_screen() {
//自定義要保存的圖片名稱
if [ $# -eq 0 ]
then
//不輸入名稱,則默認值以下
name="screenshot.png"
else
name="$1.png"
fi
adb shell screencap -p /sdcard/$name
adb pull /sdcard/$name
adb shell rm /sdcard/$name
curr_dir=pwd
echo "save to `pwd`/$name"
}
複製代碼
該腳本能夠保存在~/.zshrc
(這裏推薦一下終端zsh,很是好用), 或~/.bashrc
裏,source一下,下次就能夠很方便的使用了
錄製屏幕以 mp4 格式保存到 /sdcard:
adb shell screenrecord /sdcard/filename.mp4
複製代碼
須要中止時按 Ctrl-C
,默認錄製時間和最長錄製時間都是 180 秒。
若是須要導出到電腦:
adb pull /sdcard/filename.mp4
複製代碼