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服务进程发现设备相关推荐
- zsh: command not found: adb问题分析
问题描述 Mac上使用 adb 调试Android设备时,出现了 zsh: command not found: adb 的报错提示. 出现上述错误代表 adb 无法在挡枪 的shell 中使用,而当 ...
- app自动化测试appium教程之二——adb命令
adb命令 ADB简介 获取包名和界面名 文件传输 获取app启动时间 获取手机日志[应用] 其他adb命令 教学视频参考b站课程,此文为学习记录 (免费的羊毛,要薅呀,筒子们~) 零基础入门移动自动 ...
- adb脚本选择语句_常用adb命令汇总(绝对干货)
本文汇总了开发中常用的adb命令,熟悉这些命令在某些场景会极大的提高开发效率,绝对的干货.文中所有参数以$开头,实际使用时替换为真正参数即可. 一.启动/关闭类 启动activity 隐式action ...
- python中adb连接手机_Python脚本利用adb进行手机控制的方法
如何使用python脚本调用adb shell里面的命令 python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回 ...
- 大型网站技术架构:核心原理与案例分析阅读笔记二
大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...
- adb安装软件_安卓手表ADB实用工具箱:给你的安卓手表来点不一样的
安卓手表ADB实用工具箱是由酷安开发者(ID@明风の岚 )开发的一款针对于安卓手表的工具箱,其基于ADB命令,用可视化的界面实现对安卓手表(同时也兼容(兼容安卓手机以及安卓系统的智能电视)进行一些操作 ...
- QQ协议分析及其还原(二)
http://www.iprotocolsec.com/2012/02/28/qq%E5%8D%8F%E8%AE%AE%E5%88%86%E6%9E%90%E5%8F%8A%E5%85%B6%E8%B ...
- adb shell 命令详解,android, adb logcat
http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)
课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...
最新文章
- Nginx实用指南V1 (连载之四:流行CMS博客rewrite写法)
- Leetcode PHP题解--D6 595. Big Countries
- 浏览器卡怎么办_【十全十美】宽带断线、wifi连不上怎么办?自助排障帮到你!...
- “Chrome不能访问更新服务器(错误:3)”的解决方法
- map/vector erase
- 解决GD中文乱码问题
- flask+apache2+ubuntu
- [原译]实现IEnumerable接口理解yield关键字
- 自动色彩均衡算法(ACE)原理及实现
- 华为HCIA(HCNA)笔记,还不快快收藏!
- 注册验证python_Python登录注册验证功能实现
- 中文TTS文字转语言合成模块
- 科技赋能时代 用ocr身份证识别
- 做电商直播绝不能忽视的事:主播人设和账号定位
- 样式的新建、修改和导入/导出
- 解决 animation.FuncAnimation 更新函数无反应的方法
- MSRA实习申请经验分享
- cloudflare免费证书_久违的百度云加速免费版终于支持 HTTPS 了!
- C语言-八道笔试题由浅入深玩转指针
- LED显示技术应用于智能交通领域的 3 个特点
热门文章
- Apache Hook机制解析(上)——钩子机制的实现
- centos7-yum安装与卸载
- 日本奥委会主席否认为争取奥运会主办权行贿
- Unencrypted connection refused. Goodbye. Connection closed by foreign host.
- 《大话操作系统——做坚实的project实践派》(3)
- C语言 · 约数个数
- Maven多模块项目使用MyBatis Generator
- spring aop 应用实例
- Oracle 中定位重要(消耗资源多)的SQL
- 最全的ASP.NET开源CMS汇总