ADB原始碼分析

2021-09-01 08:09:48 字數 1351 閱讀 1039

posted on

2011 年 05 月 31 日

adb是android debug bridge的縮寫,負責計算機與android裝置的幾乎所有通訊和協作,可以認為是連線兩者的橋梁。

git clone git:

adb由兩個物理檔案組成:

adb或adb.exe,執行於pc端,包括linux、windows、mac os等系統之中,通常是x86架構上(下文中,adb指整個模組,而adb單獨指這一部分);

adbd,執行於android裝置的底層linux之中,armv5架構上。

為了保持兩者**一致,google並未將其做原始碼檔案級別的分離,而是統一為乙份**,通過傳入android.mk的$(build_simulator)變數是否為真,來構建不同的檔案。對原始碼而言,由adb_host巨集是否預定義為真來區分。

而adb本身還需要估計多個作業系統平台,這由傳入android.mk的$(host_os)來控制,它的有效取值包括linux、darwin、freebsd和windows。不同平台的主要差異是usb的控制方法和檔案路徑。

除了物理檔案上的區別,adb本身還會在pc中產生兩類不同的程序。

其中乙個程序將由命令列「adb fork-server server」產生(給使用者的呼叫介面是adb start-server),這個守護程序長期執行於後台,沒有控制台介面,稱之為adb server(adb服務端),其主要工作有兩部分:

管理pc中的android模擬器,以及通過usb線連線到pc的android裝置,負責維持執行於其中的adbd程序與自身的資料通道;

實現pc與裝置/模擬器之間的資料拷貝。

adb的另一類程序是提供給使用者的命令列工具,對使用者暴露了上述install、push、shell等介面,與使用者互動,稱之為adb client(adb客戶端)。其主要工作是解析這些命令的引數,做必要預處理,然後轉移為指令或資料,傳送給adb服務端。adb服務端再將指令資料轉 發到模擬器或裝置中,由adbd處理,產生結果,再通過adb服務端接收回來。

事實上,當adb客戶端執行時,會自動檢查當前系統中是否存在adb服務端,如果不存在,則通過「adb fork-server server」啟動乙個服務端,然後再與之建立連線。這樣,使用者就不需要關心這些概念和差異了。

因此,從執行實體上看,adb由三部分構成:

adbd

adb server

adb client

google還引入了乙個adb service(adb服務,注意與adb服務端的區別)的概念,指adbd提供的功能。這就構成了adb的四個模組。在原始碼的overview.txt 檔案中對它們的關係進行了描述。而protocol.txt描述了各模組之間通訊協作的協議格式。

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...