ADB(Android Debug Bridge)是一款功能豐富的命令行工具,旨在實現開發工作站與設備(如模擬器、實體設備)之間的通信。通過 ADB,開發者可以便捷地在設備上執行命令、傳輸文件、調試應用等。本文將詳細介紹 ADB 的工作原理、核心命令及使用方法,幫助你高效掌握這一工具。
一、ADB 的核心組件與工作原理
1. 三大核心組件
ADB 采用客戶端 - 服務器架構,包含三個關鍵部分:
- 客戶端:運行在開發工作站上,負責發送命令(如通過命令行終端調用)。
- 守護程序(adbd):作為后臺進程運行在設備上,負責執行客戶端發送的命令。
- 服務器:同樣運行在開發工作站上的后臺進程,負責管理客戶端與守護程序之間的通信。
2. 工作流程
- 端口綁定:所有 ADB 客戶端通過 5037 端口 與 ADB 服務器通信。啟動客戶端時,若服務器未運行則自動啟動,并綁定到本地 5037 端口監聽命令。
- 設備連接:服務器啟動后,會掃描 5555-5585 之間的奇數端口(最多支持 16 個模擬器),尋找運行中的設備 / 模擬器。每個設備使用一對連續端口:
- 偶數端口:用于控制臺連接(如 5554);
- 奇數端口:用于 ADB 連接(如 5555)。
- 命令轉發:服務器與設備建立連接后,客戶端發送的命令由服務器轉發至目標設備的 adbd 執行,結果再經服務器返回給客戶端。
二、查詢已連接設備
在發送 ADB 命令前,需先確認已連接的設備列表,使用以下命令:
adb devices
輸出說明
命令會返回設備的 序列號(唯一標識,如 emulator-5554
)和 狀態:
offline
:設備未連接到 ADB 或無響應;device
:設備已連接(但不代表系統完全啟動);no device
:無設備連接。
特殊情況:模擬器未列出?
若模擬器運行但未顯示在列表中,可能是以下原因導致:
- ADB 服務器未啟動;
- 模擬器通過 -port 或 -ports 指定了 5554-5584 之間的奇數端口;
- 端口空閑或模擬器切換到符合條件的其他端口;
- 啟動模擬器后才啟動 ADB 服務器。
解決辦法:重啟 ADB 服務器(adb kill-server
后再執行任意 ADB 命令)。
三、向指定設備發送命令
若存在多個設備 / 模擬器,需通過以下選項指定目標:
-d
:指定連接的實體設備;-e
:指定運行的模擬器;-s
<serial_number>:通過序列號指定設備(推薦)。
命令格式:
adb [-d | -e | -s serial_number] command
1. 端口轉發
將主機端口的請求轉發到設備端口,用于調試網絡數據:
# 主機 6100 端口 → 設備 7100 端口
adb forward tcp:6100 tcp:7100# 主機 6100 端口 → 設備 logd(系統日志守護程序)
adb forward tcp:6100 local:logd
2. 傳輸文件
使用 pull
(從設備復制到本地)和 push
(從本地復制到設備)命令:
# 從設備拉取文件:adb pull <設備路徑> <本地路徑>
adb pull /sdcard/photo.jpg ~/Desktop/# 向設備推送文件:adb push <本地路徑> <設備路徑>
adb push ~/music/song.mp3 /sdcard/music/
3. 管理 ADB 服務器
- 停止服務器:
adb kill-server
- 重啟服務器:執行任意 ADB 命令(如
adb devices
)即可自動啟動。
4. 查看所有支持的命令
如需了解完整命令列表,使用:
adb --help
四、執行 Shell 命令
通過 ADB 可直接在設備上運行 shell 命令,支持兩種方式:
1. 單條命令
# 示例:查看設備內存使用情況
adb shell free# 示例:列出設備上的應用包名
adb shell pm list packages
2. 交互式 Shell
啟動與設備的交互式命令行:
adb shell
此時可直接輸入設備端的 shell 命令(如 ls
、cd
等),退出時輸入 exit
或按 Control+D
。
總結
ADB 是連接開發工作站與設備的重要橋梁,通過其豐富的命令集,開發者可以高效地進行設備管理、文件傳輸、調試等操作。掌握 ADB 的工作原理和核心命令,能顯著提升openvela的開發效率。如需進一步探索,可通過 adb --help 查看所有命令的詳細說明。