久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android Debug Bridge(ADB) 技術(shù)實現(xiàn)(譯)

 w_hf的圖書館 2011-12-28

Android Debug Bridge(ADB) 技術(shù)實現(xiàn)(譯)

192人閱讀 評論(0) 收藏 舉報

ADB(Android Debug Bridge)技術(shù)實現(xiàn)

===============

  I、總覽
===============
  
  ADB用來做下面兩件事:
  
  - 跟蹤所有已連接的Android設(shè)備或運行在開發(fā)者機器上的模擬器實例,。
  
  - 為滿足客戶端的需求實現(xiàn)豐富的控制命令,。客戶端包括命令行用戶或者像DDMS一樣的幫助程序,,控制命令包括“adb shell”,,“adb pull”等等。這些控制命令在ADB中被稱作“服務(wù)”,。
  
  總體來看,,ADB中的每項工作通過下列組件的配合完成:
  
    1. ADB服務(wù)器
   
    ADB服務(wù)器是運行在主機上的一個后臺進程,。它的作用在于檢測USB端口感知設(shè)備的連接和拔除,以及模擬器實例的啟動或停止,。
   
    ADB服務(wù)器維護了一個已連接設(shè)備的列表,,并且為每一個連接設(shè)備分配一個狀態(tài)值,狀態(tài)值包括:OFFLINE,、BOOTLOADER,、RECOVERY、ONLINE,。
  
    ADB服務(wù)器實際上是一個龐大的多路傳輸循環(huán),,它精妙的協(xié)調(diào)客戶端、服務(wù)與設(shè)備之間的數(shù)據(jù)交換(實際上是包交換),。
  
    2. ADB守護進程(adbd)
  
    程序“adbd”作為一個后臺進程在Android設(shè)備或模擬器系統(tǒng)中運行,。它的作用是連接ADB服務(wù)器(通過USB連接設(shè)備,通過TCP連接模擬器),,并且為運行在主機上的客戶端提供一些服務(wù),。
  
    當(dāng)ADB服務(wù)器成功的與一個設(shè)備上的adbd守護進程建立連接時,ADB服務(wù)器認為這個設(shè)備是“ONLINE”狀態(tài),。否則,,ADB服務(wù)器認為設(shè)備是“OFFLINE”狀態(tài),“OFFLINE”表明ADB服務(wù)器偵測到一個新的設(shè)備或模擬器,,但是無法與該設(shè)備或模擬器上的adbd守護進程建立連接,。
   
    “BOOTLOADER”狀態(tài)表明設(shè)備處于bootloader模式下,“RECOVERY”狀態(tài)表明設(shè)備處于recovery模式下,。
  
    3. ADB命令行客戶端
  
    命令行程序“adb”用于從shell或腳本中運行adb命令,。首先,“adb”程序嘗試定位主機上的ADB服務(wù)器,,如果找不到ADB服務(wù)器,,“adb”程序自動啟動一個ADB服務(wù)器。
  
    接下來,,客戶端向ADB服務(wù)器發(fā)送服務(wù)請求,。這里面的細節(jié)不需要了解。
  
    通常,,一個單一的“adb” 二進制程序文件包含了服務(wù)器和客戶端的實現(xiàn),。這樣,服務(wù)器的分發(fā)和啟動都更加容易,。
  
    4. 服務(wù)
  
    與客戶端交互的服務(wù)有兩種:
  
    主機服務(wù):   
      主機服務(wù)運行在ADB服務(wù)器中,,因此它們根本不和設(shè)備通訊。一個典型的例子就是“adb devices”,,它請求返回當(dāng)前已知的設(shè)備及其狀態(tài)的列表,。
  
    本地服務(wù):
      本地服務(wù)運行在adbd守護進程中,或者被設(shè)備上的adbd守護進程啟動,。ADB服務(wù)器被用于客戶端與本地服務(wù)之間的多路傳輸數(shù)據(jù)流,。在這種情況下,本地服務(wù)的任務(wù)是初始化連接,,然后為ADB服務(wù)器提供服務(wù)響應(yīng)數(shù)據(jù),。
  
  
===============
  II、協(xié)議細節(jié)
===============
  
    1. 客戶端<->服務(wù)器 交互協(xié)議
  
    下面詳細說明ADB客戶端和ADB服務(wù)器之間交互的協(xié)議,。ADB服務(wù)器監(jiān)聽在TCP:localhost:5037,。
  
    客戶端用下列格式發(fā)送請求:
    A. 開頭4個字節(jié)的十六進制字符串給出請求的長度;
    B. 后面緊跟請求內(nèi)容,。
  
    舉例來說,,為了獲得ADB服務(wù)器的內(nèi)部版本號,客戶端將做下列工作:
    A. 建立tcp:localhost:5037的socket連接,;
    B. 通過socket發(fā)送字符串“000Chost:version”,。
    前綴“host:”用來指示請求被定位到ADB服務(wù)器本身(稍后我們將討論其他類型的請求)。為了便于調(diào)試排錯,,請求內(nèi)容的長度按ASCII編碼計算,。
  
    服務(wù)器用下列格式回應(yīng)客戶端請求:
    A. 成功:回應(yīng)4個字節(jié)的“OKAY”字符串;
    B. 失?。夯貞?yīng)4個字節(jié)的“FAIL”字符串 + 4個字節(jié)的十六進制長度說明 + 指定長度的字符串說明失敗原因,;
    C. “host:version”是一個例外,它的回應(yīng)是4個字節(jié)的十六進制字符串,,說明服務(wù)器的內(nèi)部版本號,。
  
    注意:回應(yīng)“OKAY”之后,連接仍然是活動的,,這樣,,客戶端可以通過這個連接發(fā)送其他的請求。但是在特定的情況下,,“OKAY”回應(yīng)會改變連接的狀態(tài),。
    舉例來說,客戶端發(fā)出“host:transport:<serialnumber>”請求,,“<serialnumber>”被用來標識一個指定的設(shè)備或模擬器,;在服務(wù)器回應(yīng)“OKAY”之后,客戶端再發(fā)起的請求會直接送達至對應(yīng)的adbd守護進程,。
  
    在以后的文章中,,SSW會列舉當(dāng)前ADB實現(xiàn)的所有服務(wù)。
  
    2. 傳輸協(xié)議
  
    ADB傳輸協(xié)議對ADB服務(wù)器與一個設(shè)備或模擬器之間的連接進行建模,。當(dāng)前有兩種類型的傳輸協(xié)議:
  
    - USB傳輸協(xié)議,,用于通過USB與物理設(shè)備的連接,。
  
    - 本地傳輸協(xié)議,用于通過TCP連接到ADB服務(wù)器,,運行在主機上的模擬器,。
  
    雖然現(xiàn)在還沒有實現(xiàn),但是理論上存在這樣的可能:寫一個本地傳輸協(xié)議,,讓它代理ADB服務(wù)器與連接到另一臺機器的設(shè)備之間的連接,,以及ADB服務(wù)器與運行在另一臺機器上的模擬器之間的連接。
  
    每次傳輸能夠在客戶端和它們所指向的設(shè)備或模擬器之間完成一個或多個多路復(fù)用數(shù)據(jù)流,。ADB服務(wù)器必須正確處理意料之外的傳輸中斷,。(比如:設(shè)備被物理拔除)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多