ADB就是Android調試橋的意思,很形象。但不知道是windows本身的原因還是windows亂七八糟軟件太多,用USB調試手機時,經常連不上ADB,或者就出現offline,導致費時費力,焦頭爛額。索性去把adb直接搞清楚。
adb分為三個部分:PC上的adb client,adb server和手機(也可能是PC上的模擬器)上的adb daemon。
這是一個多多連接的設計。即一台PC可以連接多個手機,一台手機也可以連接多個PC。
ADB Client:注意這里的Client和Daemon不是一一對應的,Client比如Eclipse DDMS,Windows終端命令行,豌豆莢等。Client本質上就是Shell,用來發送命令給Server。發送命令時,首先檢測PC上有沒有啟動Server,如果沒有Server,則自動啟動一個Server,然后將命令發送到Server,並不關心命令發送過去以后會怎樣。
ADB Server:運行在PC上的后台程序,目的是檢測USB接口何時連接或者移除設備。ADB Server維護着一個“已連接的設備的鏈表”,並且為每一個設備標記了一個狀態:offline,bootloader,recovery或者online;Server一直在做一些循環和等待,以協調client和Server還有daemon之間的通信。offline說明Server發現了一個設備,但是不能成功連接到Daemon----這樣最好重啟一下手機。
ADB Daemon:運行在手機上的一個進程,作用是連接到adb server(通過usb或tcp-ip),並且為client提供一些服務,
Client和Server之間還是要通過TCP/IP通信的,Server偵聽本機的5037端口,Client試圖去連接這個端口。
我們看到,在沒有client的時候,server進程孤獨的偵聽着5037口

在有client的時候,client和server建立了連接。

盜網圖一用,一張圖勝過千言萬語:

網上一位兄弟的流程圖畫的也很好:
adb的代碼放在android的system\core\adb中
