adb通信协议分析以及实现(二):adb服务进程发现设备
? adb服務進程一個重要的功能就是查找設備,當插入一個android設備,并且成功安裝手機驅動后,adb的服務進程就可以發現設備,當adb進程使用devices命令的時候,服務進程把自己保存的設備列表返回給adb進程。這里解釋一下,adb進程和adb服務進程。其實這兩個東西是一個exe文件,僅僅是在啟動的時候通過不同的命令行來區別。這里貼一下adb的代碼,就能更好的理解adb服務進程了。
1)進程啟動之后,經過各種的初始化之后,進入了adb_commandline函數。這個函數是用來處理所有的命令行:
2)之后解析命令行,其中就有一個關鍵的命令:
3)在第二步設置了標志之后,后面就是進入了一個死循環,然后這個服務進程就一直在后臺了:
下面是adb_main函數中代碼片段,有一個死循環,一直在查找設備:
主線程的死循環里面很簡單,就是從消息隊列獲取消息,處理之后轉發等等:
以上就是adb服務進程啟動的一個大致的過程,adb服務進程在啟動過程中會做比較多的事情,下面列舉一些重要的事件:
1)啟動一個線程,每隔1s掃描一下設備:
函數里面啟動一個線程:
線程的實現代碼,find_devices函數內部再遍歷設備,把新設備加入到設備列表中:
接下來重點說一下find_devices函數里面的一個細節,前一篇文章說到設備序列號,很多手機的序列號是一樣的,就會導致同時插入多個手機的時候區分不開始哪個手機。由于序列號相同,所以執行adb命令的時候就不知道發給哪個手機了。這個過程涉及到USB接口的操作,谷歌的代碼里面有一套adbwinapi,其實里面就是用的windows的setupapi函數而已:
可以根據接口來做一個變換,因為每個硬件的接口是唯一的,所以可以根據這個接口來變換,然后返回即可。buffer是保存的序列號,只要把你需要的序列號寫入這個緩存就可以。buffer_char_size這個參數緩存的是長度。不要越界了。
adb通信協議分析以及實現(一):www.jianshu.com/p/713c7823d…
adb通信協議分析以及實現(二):www.jianshu.com/p/4bdd315a9…
adb通信協議分析以及實現(三):www.jianshu.com/p/23581d48f…
adb通信協議分析以及實現(四):www.jianshu.com/p/639fd2155…
轉載于:https://juejin.im/post/5a30f67f6fb9a045204c370a
總結
以上是生活随笔為你收集整理的adb通信协议分析以及实现(二):adb服务进程发现设备的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10.17 配置IP,网络问题排查
- 下一篇: textField textView输入