ADB就是Android調試橋的意思,很形象。但不知道是windows自己的緣由仍是windows亂七八糟軟件太多,用USB調試手機時,常常連不上ADB,或者就出現offline,致使費時費力,焦頭爛額。索性去把adb直接搞清楚。android
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創建了鏈接。windows

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

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