App測試時常用的adb命令你都掌握了哪些呢?

本次訓練營開營時間 :8月7日 14:00 - 17:00
adb 全稱為 Android Debug Bridge(Android 調(diào)試橋),是 Android SDK 中提供的用于管理 Android 模擬器或真機的工具。
adb 是一種功能強大的命令行工具,可讓 PC 端與 Android 設備進行通信。adb 命令可執(zhí)行各種設備操作,例如安裝和調(diào)試應用。
adb組成
采用了客戶端-服務器(C/S)模型,包括三個部分:

adb Client:運行在電腦上,可以在命令行中運行 adb 命令來調(diào)用該客戶端。Client 本質(zhì)上就是 Shell,用來發(fā)送命令給 Server。發(fā)送命令時,首先檢測 PC 上有沒有啟動 Server,如果沒有 Server,則會自動啟動一個,然后將命令發(fā)送到 Server。
adb Server:運行在電腦上的后臺進程,用于管理客戶端與運行在模擬器或真機的守護進程通信。
adb Daemon:守護進程作為一個后臺進程在 Android 設備或模擬器系統(tǒng)中運行。它的作用是連接 adb 服務端,并且為運行在主機上的 adb 客戶端提供一些服務。

當 adb 客戶端啟動時,客戶端會先檢查 adb 服務端是否啟動。如果沒有,會先啟動服務端進程。adb 服務端在啟動后,會與 5037 端口綁定,并監(jiān)聽 adb 客戶端發(fā)出的命令。
然后服務端會與所有正在運行的 Android 設備建立連接。它通過掃描 5555 到 5585 之間的奇數(shù)號端口查找 Android 設備。服務端一旦發(fā)現(xiàn) Android 設備上的 adb 守護進程在運行,便會與相應的端口建立連接。每個 Android 設備都使用一對端口,偶數(shù)端口用于控制臺連接,奇數(shù)端口用于 adb 連接。
服務端與所有 Android 設備建立連接后,就可以使用 adb 命令來訪問這些設備了。服務端會管理已經(jīng)建立的連接,并處理來自 adb 客戶端的命令。
啟動adb調(diào)試
Android 真機可以通過 USB 連接到 adb,連接時需要在設備的系統(tǒng)設置中啟用 USB 調(diào)試(位于開發(fā)者選項下),啟動 USB 調(diào)試后,設備上的 adb 守護進程就會被啟動,adb 服務端才可以和設備建立連接。除了用 USB 的方式連接之外,也可以通過 WLAN 的方式連接,這種方式不做贅述。
1、模擬器:不需要手動設置 USB 調(diào)試開關,默認是打開的
2、真機通過 USB 連接
3、安裝 Android 手機驅(qū)動
4、設備啟用 USB 調(diào)試
adb常用命令
adb 命令格式
adb [-d|-e|-s <serialNumber>] <command>
-d:指定當前唯一通過 USB 連接的 Android 設備為命令目標
-e:指定當前唯一運行的模擬器為命令目標
-s:指定相應 serialNumber 號的設備/模擬器為命令目標
方括號中的內(nèi)容是可選的,尖括號內(nèi)容的是必填的。方括號中參數(shù)可以指定設備,關于設備的指定有三個參數(shù)可以使用。-d、-e 和 -s,其中使用最多的是 -s 參數(shù),在連接多臺設備的時候,一般都是使用 -s 加上設備的序列號這種方式去指定具體設備。
adb 可以同時連接多臺設備,但是一次只能對一臺設備執(zhí)行命令。所有連接多臺設備的時候,是必須要制定設備,命令才可以執(zhí)行成功的。
查詢設備
把 Android 設備連接到 adb 服務端后,需要確認設備的連接狀態(tài)。這時可以使用查詢命令進行查詢。
連接模擬器(以 MUMU 模擬器為例)
adb connect 127.0.0.1:7555
adb devices
adb connect 命令可以通過 WLAN 的方式連接到模擬器,7555 為 mumu 模擬器的端口
adb devices 可以查詢設備連接的狀態(tài)
Windows 系統(tǒng)中,連接模擬器需要先執(zhí)行 connect 命令去連接模擬器,127.0.0.1 是本地的 IP 地址,因為模擬器就是安裝在本地的,所以要使用本地的 IP 地址,加上模擬器本身規(guī)定的一個端口號。mumu 的端口號是 7555,如果使用的是其他的模擬器的話,需要先去了解它的端口號是什么,然后再去連接。MacOS 系統(tǒng)中連接模擬器不需要先執(zhí)行 connect 命令,直接執(zhí)行 adb kill-server && adb devices 命令即可。
連接真機
真機直接用 USB 連接到電腦,不需要執(zhí)行 connect 命令。
直接用 adb devices 命令查看已經(jīng)連接的設備列表即可。
hogwarts@ ~ % adb devices
List of devices attached
emulator-5554? ?device
直接命令后,如果設備已經(jīng)成功連接,那么設備列表中就會展示已連接設備的信息。
emualotr-5554:設備序列號
device:設備連接狀態(tài)為成功
安裝卸載應用
測試過程中,如果需要安裝或者卸載應用,可以直接用 adb 命令來操作。
普通安裝:adb install <apk路徑>
覆蓋安裝:adb install -r <apk路徑>
完全卸載:adb uninstall <包名>
保留配置文件:adb uninstall -k <包名>
設備與電腦傳輸文件
adb 命令支持電腦和 Android 設備之間的文件互傳。比如要提取 Android 設備中的日志文件到本地,就可以通過 adb 命令的方式來完成。
從電腦上傳文件至設備:adb push <電腦路徑> <設備路徑>
從設備復制文件至電腦:adb pull <設備路徑> <電腦路徑>
日志
打印鏈接設備的 log 信息
屏幕輸出日志:adb logcat
通過標簽過濾:adb logcat -s 標簽
顯示時間:adb logcat -v time
輸出所有信息:adb logcat -v long
輸出日志到文件:adb logcat -v time > log.txt
清除緩存日志信息:adb logcat -c
adb shell 命令
使用 adb shell 命令相當于遠程登錄了 Android 系統(tǒng),可以進入 Android 設備的系統(tǒng)內(nèi)部。進入系統(tǒng)內(nèi)部既可以執(zhí)行一些簡單的 Linux 命令也支持很多特有的命令。
使用 adb shell 命令有兩種方式。
一種是直接在 adb shell 后面跟上命令。
adb [-s serial_number] shell <command>
比如:
hogwarts@ ~ % adb shell ls
acct
cache
charger
config
d
data
default.prop
dev
etc
...
另一種方式是在設備上啟動交互式 shell
adb [-s serial_number] shell
進入 shell 之后,再執(zhí)行對應的命令。
比如進入設備內(nèi)部,可以查看設備內(nèi)部的目錄結(jié)構(gòu)和內(nèi)容
hogwarts@ ~ % adb shell
root@x86:/ # ls
acct
cache
charger
config
d
data
default.prop
dev
...
要退出交互式 shell,可以按 Ctrl + D 鍵或輸入 exit。
Andriod常用測試命令
設備截圖 / 錄屏
在測試過程中,如果需要截圖或者是錄屏,也可以直接使用 adb 命令來完成。
截圖:adb shell screencap <設備路徑>
錄屏:adb shell screenrecord <設備路徑>
調(diào)用 Activity 管理器
在 adb shell 中,可以使用 Activity 管理器 (am) 工具發(fā)出命令以執(zhí)行各種系統(tǒng)操作,如啟動 Activity、強行停止進程、修改設備屏幕屬性,等等。
在測試過程中,如果需要啟動 app 或者強制關閉 app,可以通過 adb 命令來實現(xiàn)。
啟動應用:adb shell am start -n <包名>/<Activity名>
強制停止應用:adb shell am force-stop <包名>
調(diào)用軟件包管理器
在 adb shell 中,可以使用軟件包管理器 (pm) 工具發(fā)出命令,以對設備上安裝的應用軟件包執(zhí)行操作和查詢。
如果需要查詢設備里都安裝了什么應用,就可以使用 adb shell pm list 來查看,還可以加上不同的參數(shù)去查看不同類型的應用。而且也可以通過 adb 命令來清除應用相關的數(shù)據(jù)。
顯示設備中安裝的所有應用:adb shell pm list packages
只顯示系統(tǒng)應用:adb shell pm list packages -s
只顯示第三方應用:adb shell pm list packages -3
刪除與軟件包關聯(lián)的所有數(shù)據(jù):adb shell pm clear <包名>
adb shell dumpsys
dumpsys 是一種在 Android 設備上運行的工具,可提供有關系統(tǒng)服務的信息??梢允褂?adb 從命令行調(diào)用 dumpsys,獲取在連接的設備上運行的所有系統(tǒng)服務的診斷輸出。
比如在測試中,如果需要通過 adb 命令啟動 app,則需要知道 app 的包名和入口的 Activity 名。這個時候,就可以通過下面這條命令獲取到這兩個信息。
這個場景,需要先把要獲取信息的應用啟動,讓它在前臺運行,然后執(zhí)行命令
adb shell dumpsys activity | grep mFocusedActivity
hogwarts@ ~ % adb shell dumpsys activity | grep mFocusedActivity ?mFocusedActivity: ActivityRecord{9dae968 u0 ?
com.xueqiu.android/.common.MainActivity t139}
下方的日志中就會展示出來當前的包名和 Activity 名稱。
包名:com.xueqiu.android
Activity 名:.common.MainActivity
adb uiautomator
adb 命令還支持直接獲取應用的頁面信息。這個頁面信息包含了頁面中元素的屬性,可以方便做自動化測試的時候去定位元素。獲取到的頁面布局會輸出到一個 xml 文件中。
當前窗口的 UI 布局簡化信息:adb shell uiautomator dump --compressed
hogwarts@ ~ % adb shell uiautomator dump --compressed
UI hierchary dumped to: /sdcard/window_dump.xml
不指定輸出文件路徑時,dump 下來的文件默認存儲路徑為 /sdcard/window_dump.xml
可以通過 adb pull 命令把文件傳輸?shù)诫娔X中,然后用 uiautomatorviewer 工具打開查看布局。
指定輸出文件路徑:adb shell uiautomator dump file <設備路徑>