這只是一篇筆記,如果你是專業的 Android 開發人員,你應該看一手知識,也就是官方的文件,如果你是隻是想要簡單瞭解,可以看這篇。
ADB 全稱 Android Debug Bridge,即安卓除錯橋,通過 ADB 能夠與模擬器例項或者是連線的安卓裝置進行通訊,可以通過它來除錯安卓應用,做應用的自動化測試,搭建雲測試平臺等。
安裝
brew cask install android-platform-tools
複製程式碼
通過 USB 連線手機,開啟手機的開發者選項(允許通過 USB 除錯、通過 USB 安裝應用),使用 adb devices
可以檢視連線的裝置
輸出格式為 [serialNumber] [state],serialNumber 就是序列號,state 有如下幾種:
offline —— 表示裝置未連線成功或無響應。
device —— 裝置已連線。注意這個狀態並不能標識 Android 系統已經完全啟動和可操作,在裝置啟動過程中裝置例項就可連線到 adb,但啟動完畢後系統才處於可操作狀態。
no device —— 沒有裝置/模擬器連線。
加上 -l
引數可以看到具體的裝置資訊:
使用 adb help
檢視幫助
命令語法
與其他工具的命令列類似,ADB 命令有相應的 options,從上面的 adb help
中可以看到對應的全域性 options ,最常用的 options 就是 -s
也就是在多裝置連線的時候使用指定序列號的裝置。大致命令格式可以總結為:
adb [-d|-e|-s <serialNumber>] <command>
複製程式碼
檢視應用
檢視裝置安裝的應用
adb shell pm list packages
複製程式碼
其中 pm
是 package manager
的縮寫,abd shell
自然就是執行裝置的終端 shell 的意思,因為 android
本身就是基於 unix
的。
可以通過引數來過濾,如 '-3' 為只顯示第三方應用,-s
為只顯示系統應用,同樣也可以通過管道和 grep
來過濾,如我想知道裝置中安裝了哪些騰訊的應用軟體:
adb shell pm list packages | grep tencent
複製程式碼
可以看到安裝的騰訊應用程式有 qq音樂(com.tencent.qqmusic)、qq郵箱(com.tencent.androidqqmail)、微信(com.tencent.mm)、手機QQ(com.tencent.mobileqq)、和平精英(com.tencent.tmgp.pubgmhd),而 com.tencent.androidqqmail 是系統應用,暫時不知道是哪個。
安裝應用
可以通過 ADB 給手機安裝電腦上有的 apk ,如給手機裝上微博:
adb install /Users/huruji/Downloads/weibo.apk
複製程式碼
一段時間後終端顯示 success
則表明安裝成功。
解除安裝應用
類似於上面,使用 uninstall 命令加上包名即可,如解除安裝微博:
adb uninstall com.sina.weibo
複製程式碼
一段時間後終端顯示 success
則表明解除安裝成功。
檢視應用安裝路徑
如檢視微博的安裝路徑
adb shell pm path com.sina.weibo
複製程式碼
開啟應用
開啟應用需要知道對應的包名和 Activity 名,可以先通過命令獲取啟動頁,如獲取微信的啟動頁:
adb shell dumpsys window windows | grep "Current"
複製程式碼
獲取到包名和 Activity 名是 com.tencent.mm/com.tencent.mm.ui.LauncherUI
,使用 adb shell am start
命令開啟
adb shell am start com.tencent.mm/com.tencent.mm.ui.LauncherUI
複製程式碼
其中 am 是 Activity Manager
的縮寫
眼睛盯著手機就可以看到手機 “自動” 開啟了微信(這個不好記錄演示,得自己嘗試)
退出應用
如退出微信:
adb shell am force-stop com.tencent.mm
複製程式碼
複製檔案
將電腦的檔案複製到裝置上成為 push
,將裝置上的檔案複製到電腦上成為 pull
adb pull <裝置裡的檔案路徑> [電腦上的目錄]
複製程式碼
adb push <電腦上的檔案路徑> <裝置裡的目錄>
複製程式碼
模擬按鍵、輸入
通過輸入 adb shell input
可以看到對應的提示:
輸入文字就是
adb shell input text
複製程式碼
模擬按鍵就是
adb shell input keyevent
複製程式碼
模擬點選就是
adb shell input tap
複製程式碼
模擬滑動就是
adb shell input swipe
複製程式碼
比較需要記憶的就是按鍵的keycode,擷取 awesome adb 的總結:
還有就是 swipe 的座標對應的是真實的螢幕解析度,比如,我想讓手機在抖音應用裡自動切換視訊就可以使用swipe:
adb shell input swipe 250 1000 250 100
複製程式碼
視窗管理
視窗管理的命令是 wm
,是 window manager
的縮寫
如上面提到的需要獲取到螢幕的解析度:
adb shell wm size
複製程式碼
也可以通過這個命令修改視窗解析度,如:
adb shell wm size 720x1280
複製程式碼
同樣可以通過 reset 還原回來
adb shell wm size reset
複製程式碼
獲取密度
adb shell wm density
複製程式碼
同樣可以修改和重置
adb shell wm density 500
複製程式碼
adb shell wm density reset
複製程式碼
設定內邊距
adb shell wm overscan 50,100,0,200
複製程式碼
重置
adb shell wm overscan reset
複製程式碼
裝置資訊
獲取手機型號
adb shell getprop ro.product.model
複製程式碼
獲取電池狀況
adb shell dumpsys battery
複製程式碼
scale
表示最大電量,level 表示當前電量。
獲取 Android 版本
adb shell getprop ro.build.version.release
複製程式碼
還有其他的資訊也可以通過 getprop
命令獲取:
獲取裝置 IP 地址
adb shell ifconfig | grep Mask
複製程式碼
裝置的 IP 地址就是 10.159.100.193
截圖和錄屏
截圖
截圖可以將檔案存在裝置裡也可以匯出到電腦,如匯出到電腦:
adb shell screencap -p > /Users/huruji/Downloads/cap/a.png
複製程式碼
-p
的意思就是儲存為 png 格式,>
表示儲存在電腦裡,如果去掉 >
將路徑換成裝置的路徑就是儲存在裝置裡。
錄屏
錄屏儲存在裝置內,如果需要匯出到電腦端可以使用之前提到的 pull
命令,錄屏預設最長時間是180s:
shell screenrecord /sdcard/b.mp4
複製程式碼
將檔案匯出
adb shell pull /sdcard/b.mp4
複製程式碼
需要注意的是匯出到的是當前資料夾,所以如果需要指定對應的資料夾,需要先 cd
到對應資料夾。
以上大概就是常用的操作,如果你需要通過程式碼控制的話就需要封裝相應的包,畢竟裸著拼接字串很難受,我大概在 npm 上搜尋了一下,目前這類包相對較少,比較流行的就是appium-adb,而這個也是服務於專案github.com/appium/appi…