博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
adb通信协议分析以及实现(二):adb服务进程发现设备
阅读量:6993 次
发布时间:2019-06-27

本文共 890 字,大约阅读时间需要 2 分钟。

  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通信协议分析以及实现(一):

adb通信协议分析以及实现(二):

adb通信协议分析以及实现(三):

adb通信协议分析以及实现(四):

转载地址:http://ywdvl.baihongyu.com/

你可能感兴趣的文章
世界五百强——日立制作所选择OA办公系统,携手开拓海外市场
查看>>
精益生产管理的核心思想
查看>>
百度输入法下载|百度拼音输入法下载
查看>>
mysql分页(ajax)
查看>>
办公资源分享:五个实用的在线网站
查看>>
深入研究Netty框架之ByteBuf功能原理及源码分析
查看>>
华为ospf与思科ospf对比
查看>>
tcpdump
查看>>
keytool基本命令
查看>>
技术随想--不求安稳,超越自我
查看>>
windows下读取机器的ilo ip来设定本地连接ip bat文件
查看>>
New Guy
查看>>
IOPS计算
查看>>
支持容器节点的控件包MindFusion.WinForms Pack
查看>>
我的友情链接
查看>>
Linux系统启动过程
查看>>
2003活动目录:管理特征
查看>>
CSS实现背景透明,文字不透明(各浏览器兼容)
查看>>
NFinal 揭秘之控制器
查看>>
C语言调用SQLIte3数据库函数找不到怎么办?
查看>>