adb簡介
Android Debug Bridge (adb) 是一個Android的命令行工具??梢杂脕磉B接模擬器或?qū)嶋H的移動設(shè)備。比如 adb logcat, adb shell。Dalvik Debug Monitor Server(DDMS) 后臺也是運(yùn)行的adb來實(shí)現(xiàn)監(jiān)控調(diào)試移動設(shè)備。
adb 原理
adb允許我們與模擬器或連接的 Android 設(shè)備進(jìn)行通信。并提供對 Unix shell(可用來在模擬器或連接的設(shè)備上運(yùn)行各種命令)的訪問。該工具是一個C/S架構(gòu)實(shí)現(xiàn)的程序,包括三個組件:
- ADB Client:運(yùn)行在PC上,通過在命令行執(zhí)行adb,就啟動了ADB Client程序
- ADB Server:運(yùn)行于PC的后臺進(jìn)程,用于管理ADB Client和Daemon間的通信
- ADB Daemon (即adbd) :運(yùn)行在模擬器或移動設(shè)備上的后臺服務(wù)。當(dāng)Android系統(tǒng)啟動時,由init程序啟動adbd。如果adbd掛了,則adbd會由init重新啟動。
您可以在 android_sdk/platform-tools/ 中找到 adb 工具。

image.png
adb執(zhí)行過程
- 1.Client 調(diào)用某個 adb 命令
- 2.adb 進(jìn)程 fork 出一個子進(jìn)程作為 Server
- 3.Server 查找當(dāng)前連接的 emulator/device
- 4.Server 接收到來自 Client 請求
- 5.Server 處理請求,將本地處理不了的請求發(fā)給 emulator/device
- 6.位于 emulator/device 的 adbd拿到請求后交給對應(yīng)的java虛擬機(jī)進(jìn)程。
- 7.adbd 將結(jié)果發(fā)回給 Server
- 8.Server 將結(jié)果發(fā)回給 Client

image.png
Q&A
Q:PC上為什么要有一個ADB Server,而不是ADB Client 和 ADB Daemon 直接通信呢?
A:因?yàn)?ADB 是一個需要支持多對多架構(gòu)的工具,一個PC可以連接多臺手機(jī)設(shè)備或虛擬機(jī),一個手機(jī)也可以同時連接多臺PC。就需要一個統(tǒng)一的Sever管理多個設(shè)備的連接。