日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

adb通信协议分析以及实现(二):adb服务进程发现设备

發布時間:2025/7/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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服务进程发现设备的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。