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