軟體測試/測試開發 | App測試時常用的adb命令你都掌握了哪些呢?

測試人666 發佈 2023-02-22T15:31:07.643464+00:00

公眾號搜索:TestingStudio 霍格沃茲的乾貨都很硬核adb 全稱為 Android Debug Bridge(Android 調試橋),是 Android SDK 中提供的用於管理 Android 模擬器或真機的工具。

公眾號搜索:TestingStudio 霍格沃茲的乾貨都很硬核

adb 全稱為 Android Debug Bridge(Android 調試橋),是 Android SDK 中提供的用於管理 Android 模擬器或真機的工具。

adb 是一種功能強大的命令行工具,可讓 PC 端與 Android 設備進行通信。adb 命令可執行各種設備操作,例如安裝和調試應用。

adb組成

採用了客戶端-伺服器(C/S)模型,包括三個部分:

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

adb工作原理

當 adb 客戶端啟動時,客戶端會先檢查 adb 服務端是否啟動。如果沒有,會先啟動服務端進程。adb 服務端在啟動後,會與 5037 埠綁定,並監聽 adb 客戶端發出的命令。

然後服務端會與所有正在運行的 Android 設備建立連接。它通過掃描 5555 到 5585 之間的奇數號埠查找 Android 設備。服務端一旦發現 Android 設備上的 adb 守護進程在運行,便會與相應的埠建立連接。每個 Android 設備都使用一對埠,偶數埠用於控制台連接,奇數埠用於 adb 連接。

服務端與所有 Android 設備建立連接後,就可以使用 adb 命令來訪問這些設備了。服務端會管理已經建立的連接,並處理來自 adb 客戶端的命令。

啟動adb調試

Android 真機可以通過 USB 連接到 adb,連接時需要在設備的系統設置中啟用 USB 調試(位於開發者選項下),啟動 USB 調試後,設備上的 adb 守護進程就會被啟動,adb 服務端才可以和設備建立連接。除了用 USB 的方式連接之外,也可以通過 WLAN 的方式連接,這種方式不做贅述。

  1. 模擬器:不需要手動設置 USB 調試開關,默認是打開的
  2. 真機通過 USB 連接
  3. 安裝 Android 手機驅動
  4. 設備啟用 USB 調試

adb常用命令

adb 命令格式

adb [-d|-e|-s <serialNumber>] <command>
  • -d:指定當前唯一通過 USB 連接的 Android 設備為命令目標
  • -e:指定當前唯一運行的模擬器為命令目標
  • -s:指定相應 serialNumber 號的設備/模擬器為命令目標

方括號中的內容是可選的,尖括號內容的是必填的。方括號中參數可以指定設備,關於設備的指定有三個參數可以使用。-d、-e 和 -s,其中使用最多的是 -s 參數,在連接多台設備的時候,一般都是使用 -s 加上設備的序列號這種方式去指定具體設備。

adb 可以同時連接多台設備,但是一次只能對一台設備執行命令。所有連接多台設備的時候,是必須要制定設備,命令才可以執行成功的。

查詢設備

把 Android 設備連接到 adb 服務端後,需要確認設備的連接狀態。這時可以使用查詢命令進行查詢。

連接模擬器(以 MUMU 模擬器為例)

adb connect 127.0.0.1:7555
adb devices
  • adb connect 命令可以通過 WLAN 的方式連接到模擬器,7555 為 mumu 模擬器的埠
  • adb devices 可以查詢設備連接的狀態

Windows 系統中,連接模擬器需要先執行 connect 命令去連接模擬器,127.0.0.1 是本地的 IP 地址,因為模擬器就是安裝在本地的,所以要使用本地的 IP 地址,加上模擬器本身規定的一個埠號。mumu 的埠號是 7555,如果使用的是其他的模擬器的話,需要先去了解它的埠號是什麼,然後再去連接。MacOS 系統中連接模擬器不需要先執行 connect 命令,直接執行 adb kill-server && adb devices 命令即可。

連接真機

真機直接用 USB 連接到電腦,不需要執行 connect 命令。

直接用 adb devices 命令查看已經連接的設備列表即可。

hogwarts@ ~ % 
adb devicesList of devices attached
emulator-5554   device

直接命令後,如果設備已經成功連接,那麼設備列表中就會展示已連接設備的信息。

  • emualotr-5554:設備序列號
  • device:設備連接狀態為成功

安裝卸載應用

測試過程中,如果需要安裝或者卸載應用,可以直接用 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 系統,可以進入 Android 設備的系統內部。進入系統內部既可以執行一些簡單的 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 之後,再執行對應的命令。

比如進入設備內部,可以查看設備內部的目錄結構和內容

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 <設備路徑>


調用 Activity 管理器

在 adb shell 中,可以使用 Activity 管理器 (am) 工具發出命令以執行各種系統操作,如啟動 Activity、強行停止進程、修改設備屏幕屬性,等等。

在測試過程中,如果需要啟動 app 或者強制關閉 app,可以通過 adb 命令來實現。

  • 啟動應用:adb shell am start -n <包名>/<Activity名>
  • 強制停止應用:adb shell am force-stop <包名>


調用軟體包管理器

在 adb shell 中,可以使用軟體包管理器 (pm) 工具發出命令,以對設備上安裝的應用軟體包執行操作和查詢。

如果需要查詢設備里都安裝了什麼應用,就可以使用 adb shell pm list 來查看,還可以加上不同的參數去查看不同類型的應用。而且也可以通過 adb 命令來清除應用相關的數據。

  • 顯示設備中安裝的所有應用:adb shell pm list packages
  • 只顯示系統應用:adb shell pm list packages -s
  • 只顯示第三方應用:adb shell pm list packages -3
  • 刪除與軟體包關聯的所有數據:adb shell pm clear <包名>

adb shell dumpsys

dumpsys 是一種在 Android 設備上運行的工具,可提供有關系統服務的信息。可以使用 adb 從命令行調用 dumpsys,獲取在連接的設備上運行的所有系統服務的診斷輸出。

比如在測試中,如果需要通過 adb 命令啟動 app,則需要知道 app 的包名和入口的 Activity 名。這個時候,就可以通過下面這條命令獲取到這兩個信息。

這個場景,需要先把要獲取信息的應用啟動,讓它在前台運行,然後執行命令

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 命令把文件傳輸到電腦中,然後用 uiautomatorviewer 工具打開查看布局。

  • 指定輸出文件路徑:adb shell uiautomator dump file <設備路徑>
關鍵字: