1. 程式人生 > 其它 >技術分享 | App測試時常用的adb命令你都掌握了哪些呢?

技術分享 | App測試時常用的adb命令你都掌握了哪些呢?

本文節選自霍格沃茲測試開發學社內部教材

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 devices

List 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 <裝置路徑>

你好呀,喜歡這篇文章的話煩請點個“贊”哦!萬分感謝~() PS:有問題可以聯絡我們哦~v ceshiren001

>>更多技術文章分享和免費資料領取