adb服务进程一个重要的功能就是查找设备,当插入一个android设备,而且成功安装手机驱动后,adb的服务进程就能够发现设备,当adb进程使用devices命令的时候,服务进程把本身保存的设备列表返回给adb进程。这里解释一下,adb进程和adb服务进程。其实这两个东西是一个exe文件,仅仅是在启动的时候经过不一样的命令行来区别。这里贴一下adb的代码,就能更好的理解adb服务进程了。android
1)进程启动以后,通过各类的初始化以后,进入了adb_commandline函数。这个函数是用来处理全部的命令行:windows
2)以后解析命令行,其中就有一个关键的命令:api
3)在第二步设置了标志以后,后面就是进入了一个死循环,而后这个服务进程就一直在后台了:缓存
下面是adb_main函数中代码片断,有一个死循环,一直在查找设备:函数
主线程的死循环里面很简单,就是从消息队列获取消息,处理以后转发等等:命令行
以上就是adb服务进程启动的一个大体的过程,adb服务进程在启动过程当中会作比较多的事情,下面列举一些重要的事件:线程
1)启动一个线程,每隔1s扫描一下设备:3d
函数里面启动一个线程:接口
线程的实现代码,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…