寫在前面:因為自己的ios專案需要和安卓的智慧型裝置通訊,因此需要了解adb協議,但是實在是看不進去,只好乙個字乙個字的敲一遍來幫助自己理解這篇文章。
一.為什麼要寫這一系列文章谷歌提供的adb工具很好很強大,但是缺點非常多。首先,對中文的支援非常差,abd的各種命令在處理帶有中文路徑的時候顯得很無力。還有就是adb這個工具本身就存在巨大的缺陷。現在的手機助手裡面使用的adb都是經過修改的,最主要的修改就是adb的devices命令返回的裝置序列號。這個就是我說的巨大的缺陷之一。還有就是使用adb的方式也不方便,需要啟動乙個adb程序,然後這個程序和adb的伺服器程序通訊。明明就是乙個普通的socket通訊,何必這麼麻煩啟動乙個額外程序,自己寫乙個也花不了多少時間,我僅僅用了500行**就搞定了。但是要重寫,就必須要了解adb的協議已經傳送和接受的命令格式。
二.adb的工作原理這裡從表面上來說一下adb的工作原理。先看一下下面的圖:
上面的圖分為兩部分,第一部分完全是發生在電腦上的。其實就是一台電腦上的socket通訊。而第二部分就是電腦和手機之間的socket通訊了,這裡解釋一下這三個東西。1)adb程序,當我們在執行任何命令的時候都會啟動乙個adb程序。比如adb devices。這裡啟動了乙個adb程序,傳遞了乙個命令列(devices)。這個程序執行完devices命令之後會退出。也就是說執行乙個命令會啟動一下adb程序,命令執行完之後adb程序就退出了。
2)adb服務程序。這個程序在電腦上最多只有乙個。是用來接收adb發過來的命令的,必要的時候**給手機的adbd程序。無論你電腦安裝了多少個助手,也只會有啟動乙個。並且一般情況下,啟動之後就會駐留,不會主動退出。正式由於這個服務程序有且最多只能有乙個,所以現在所有的助手都在搶這個入口,誰把自己當成了服務程序,誰就有了很多權利。最無恥的莫過於360的手機助手。乾掉別人,成就自己。而且還做很多齷齪的事情。這個程序可以當成是乙個server,監聽本地5037埠。
3)手機的adbd程序,adb服務程序接受到命令之後,大部分的命令都會**給手機的這個程序,因為adb服務程序並不能完成工作,而是需要手機的程序來協同完成。這個就不需要太多的關注了。
三.adb的簡要流程,這裡以adb devices命令簡單介紹
紅框部分是有些命令需要手機端完成,所以需要把命令**給手機端處理。adb通訊協議分析以及實現(一): www.jianshu.com/p/713c7823d…
adb通訊協議分析以及實現(二):www.jianshu.com/p/4bdd315a9…
adb通訊協議分析以及實現(三):www.jianshu.com/p/23581d48f…
adb通訊協議分析以及實現(四):www.jianshu.com/p/639fd2155…
IIC通訊協議分析
iic iic,inter integrated circuit 兩線式序列匯流排,用於mcu和外設間的通訊。iic只需兩根線 資料線sda和時鐘線scl。以半雙工方式實現mcu和外設之間資料傳輸,速度可達400kbps。多主機i2c匯流排結構 注意sda和scl兩根匯流排需要上拉,使匯流排處於空閒...
網路通訊協議分析
目標 1.研究資料格式 2.研究協議的閱讀和制定 使用 疑問 1.傳輸層協議只有tcp和udp嗎 答案 推測,兩個協議的特性決定,只有可靠,不可靠的區分。錯誤,看維基百科 2.為什麼tcp要有三次 答案 建立可靠連線。客戶端 我發資料呢 服務端 恩,你發吧 客戶端 好,那我發了。服務端 等待接收中 ...
通訊協議設計分析
幾乎任何專案都會涉及到通訊,那麼通訊協議的設計就顯得十分關鍵,目前就我個人來說串列埠 網口為從位元組流中取到正確的資料必須要開始通訊協議的設計。轉義字元 幾乎能保證99 的傳輸正確,除非硬體丟包太嚴重。對於很多裝置之間的通訊,經常需要自己設計一套通訊協議。當然此處的通訊協議一般都是建立在tcpip協...