什麼是ADB

ADB, Android Debug Bridge, 是一個client-server程序,能夠用來和安卓設備交流html

Client: 用來發送命令的,client運行在開發機器上(電腦cmd, adb shell), ddms也能夠建立adb clientjava

Daemon(adbd): 手機上的一個後臺進程,用來執行adb命令的android

Server:運行在pc上,用來管理client和dameon的交流(which manages communication between the client and the daemon)shell

 

client(commond) to server, server to dameon(手機執行命令)socket

ADB怎麼工做

1.當啓動adb client的時候,client會首先檢查adb server是否已經在運行,若是沒有,會先啓動adb serverspa

2.server啓動以後,會綁定一個本地的TCP端口5037,而後會監聽來自adb client發來的全部命令,adb client使用的都是5037端口來和server交流code

3.server會和手機設備創建鏈接,server會在端口號5555到5585之間的單數的端口裏查找手機。當server找到手機上的adb daemon的時候,server會對那個端口創建鏈接。要注意的是,每一個手機設備(或者模擬器)都須要一對連續的端口號,一個偶數的端口號是console用的,一個單數的端口號是adb用的,好比server

Emulator 1, console: 5554
Emulator 1, adb: 5555
Emulator 2, console: 5556
Emulator 2, adb: 5557
and so on...

4.一旦server與手機創建鏈接,你就能夠使用adb命令去操做手機。由於server能夠管理與手機設備的鏈接,還有處理來自各個adb client的命令。這樣,你就能夠經過任何client(腳本)去控制手機htm

 

全部的client經過TCP端口號5037進行與server通訊,而server建立local socket與remote socket,前者用於和client通訊,後者用與遠端(adbd)進行通訊,emulator經過TCP,real device則經過usb。blog

 

三者通訊整個流程是這樣的:
 a、client調用某個adb命令
 b、adb進程fork出一個子進程做爲server
 c、server查找當前鏈接的emulator/device
 d、server接收到來自client請求
 e、server處理請求,將本地處理不了的請求發給emulator/device
 f、位於emulator/device的adbd拿到請求後交給對應的java虛擬機進程。
 g、adbd將結果發回給server
 h、server講結果發回給client

 

參考:https://developer.android.com/studio/command-line/adb.html

相關文章
相關標籤/搜索