ADB 實用筆記

_忽如寄發表於2019-07-13

這只是一篇筆記,如果你是專業的 Android 開發人員,你應該看一手知識,也就是官方的文件,如果你是隻是想要簡單瞭解,可以看這篇。

ADB 全稱 Android Debug Bridge,即安卓除錯橋,通過 ADB 能夠與模擬器例項或者是連線的安卓裝置進行通訊,可以通過它來除錯安卓應用,做應用的自動化測試,搭建雲測試平臺等。

安裝

brew cask install android-platform-tools
複製程式碼

通過 USB 連線手機,開啟手機的開發者選項(允許通過 USB 除錯、通過 USB 安裝應用),使用 adb devices 可以檢視連線的裝置

ADB 實用筆記

輸出格式為 [serialNumber] [state],serialNumber 就是序列號,state 有如下幾種:

offline —— 表示裝置未連線成功或無響應。

device —— 裝置已連線。注意這個狀態並不能標識 Android 系統已經完全啟動和可操作,在裝置啟動過程中裝置例項就可連線到 adb,但啟動完畢後系統才處於可操作狀態。

no device —— 沒有裝置/模擬器連線。

加上 -l 引數可以看到具體的裝置資訊:

ADB 實用筆記

使用 adb help 檢視幫助

ADB 實用筆記

命令語法

與其他工具的命令列類似,ADB 命令有相應的 options,從上面的 adb help 中可以看到對應的全域性 options ,最常用的 options 就是 -s 也就是在多裝置連線的時候使用指定序列號的裝置。大致命令格式可以總結為:

adb [-d|-e|-s <serialNumber>] <command> 
複製程式碼

檢視應用

檢視裝置安裝的應用

adb shell pm list packages
複製程式碼

ADB 實用筆記

其中 pmpackage manager 的縮寫,abd shell 自然就是執行裝置的終端 shell 的意思,因為 android 本身就是基於 unix 的。

可以通過引數來過濾,如 '-3' 為只顯示第三方應用,-s 為只顯示系統應用,同樣也可以通過管道和 grep 來過濾,如我想知道裝置中安裝了哪些騰訊的應用軟體:

adb shell pm list packages | grep tencent
複製程式碼

ADB 實用筆記

可以看到安裝的騰訊應用程式有 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 則表明安裝成功。

ADB 實用筆記

解除安裝應用

類似於上面,使用 uninstall 命令加上包名即可,如解除安裝微博:

adb uninstall com.sina.weibo
複製程式碼

一段時間後終端顯示 success 則表明解除安裝成功。

檢視應用安裝路徑

如檢視微博的安裝路徑

adb shell pm path com.sina.weibo
複製程式碼

ADB 實用筆記

開啟應用

開啟應用需要知道對應的包名和 Activity 名,可以先通過命令獲取啟動頁,如獲取微信的啟動頁:

adb shell dumpsys window windows | grep "Current"
複製程式碼

ADB 實用筆記

獲取到包名和 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 實用筆記

輸入文字就是

adb shell input text
複製程式碼

模擬按鍵就是

adb shell input keyevent
複製程式碼

模擬點選就是

adb shell input tap
複製程式碼

模擬滑動就是

adb shell input swipe
複製程式碼

比較需要記憶的就是按鍵的keycode,擷取 awesome adb 的總結:

ADB 實用筆記

ADB 實用筆記

還有就是 swipe 的座標對應的是真實的螢幕解析度,比如,我想讓手機在抖音應用裡自動切換視訊就可以使用swipe:

adb shell input swipe 250 1000 250 100
複製程式碼

ADB 實用筆記

視窗管理

視窗管理的命令是 wm,是 window manager 的縮寫

如上面提到的需要獲取到螢幕的解析度:

adb shell wm size
複製程式碼

ADB 實用筆記

也可以通過這個命令修改視窗解析度,如:

adb shell wm size 720x1280
複製程式碼

ADB 實用筆記

同樣可以通過 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 實用筆記
重置

adb shell wm overscan reset
複製程式碼

裝置資訊

獲取手機型號

adb shell getprop ro.product.model
複製程式碼

ADB 實用筆記

獲取電池狀況

adb shell dumpsys battery
複製程式碼

ADB 實用筆記

scale 表示最大電量,level 表示當前電量。

獲取 Android 版本

adb shell getprop ro.build.version.release
複製程式碼

ADB 實用筆記

還有其他的資訊也可以通過 getprop 命令獲取:

ADB 實用筆記

獲取裝置 IP 地址

adb shell ifconfig | grep Mask
複製程式碼

ADB 實用筆記

裝置的 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…

呼應下開頭,開頭提到的 ADB 用於雲測試平臺,目前我知道的開源的有stf 和阿里開源的macaca

相關文章