adb簡介
Android Debug Bridge (adb) 是一個(gè)Android的命令行工具∨ɡ可以用來連接模擬器或?qū)嶋H的移動(dòng)設(shè)備砌滞。比如 adb logcat, adb shell。Dalvik Debug Monitor Server(DDMS) 后臺(tái)也是運(yùn)行的adb來實(shí)現(xiàn)監(jiān)控調(diào)試移動(dòng)設(shè)備喇辽。
adb 原理
adb允許我們與模擬器或連接的 Android 設(shè)備進(jìn)行通信躲惰。并提供對(duì) Unix shell(可用來在模擬器或連接的設(shè)備上運(yùn)行各種命令)的訪問奸焙。該工具是一個(gè)C/S架構(gòu)實(shí)現(xiàn)的程序嫌术,包括三個(gè)組件:
- ADB Client:運(yùn)行在PC上烫扼,通過在命令行執(zhí)行adb曙求,就啟動(dòng)了ADB Client程序
- ADB Server:運(yùn)行于PC的后臺(tái)進(jìn)程,用于管理ADB Client和Daemon間的通信
- ADB Daemon (即adbd) :運(yùn)行在模擬器或移動(dòng)設(shè)備上的后臺(tái)服務(wù)映企。當(dāng)Android系統(tǒng)啟動(dòng)時(shí)悟狱,由init程序啟動(dòng)adbd。如果adbd掛了堰氓,則adbd會(huì)由init重新啟動(dòng)挤渐。
您可以在 android_sdk/platform-tools/ 中找到 adb 工具。
image.png
adb執(zhí)行過程
- 1.Client 調(diào)用某個(gè) adb 命令
- 2.adb 進(jìn)程 fork 出一個(gè)子進(jìn)程作為 Server
- 3.Server 查找當(dāng)前連接的 emulator/device
- 4.Server 接收到來自 Client 請(qǐng)求
- 5.Server 處理請(qǐng)求豆赏,將本地處理不了的請(qǐng)求發(fā)給 emulator/device
- 6.位于 emulator/device 的 adbd拿到請(qǐng)求后交給對(duì)應(yīng)的java虛擬機(jī)進(jìn)程。
- 7.adbd 將結(jié)果發(fā)回給 Server
- 8.Server 將結(jié)果發(fā)回給 Client
image.png
Q&A
Q:PC上為什么要有一個(gè)ADB Server,而不是ADB Client 和 ADB Daemon 直接通信呢掷邦?
A:因?yàn)?ADB 是一個(gè)需要支持多對(duì)多架構(gòu)的工具白胀,一個(gè)PC可以連接多臺(tái)手機(jī)設(shè)備或虛擬機(jī),一個(gè)手機(jī)也可以同時(shí)連接多臺(tái)PC抚岗。就需要一個(gè)統(tǒng)一的Sever管理多個(gè)設(shè)備的連接或杠。