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服务进程发现设备相关推荐

  1. zsh: command not found: adb问题分析

    问题描述 Mac上使用 adb 调试Android设备时,出现了 zsh: command not found: adb 的报错提示. 出现上述错误代表 adb 无法在挡枪 的shell 中使用,而当 ...

  2. app自动化测试appium教程之二——adb命令

    adb命令 ADB简介 获取包名和界面名 文件传输 获取app启动时间 获取手机日志[应用] 其他adb命令 教学视频参考b站课程,此文为学习记录 (免费的羊毛,要薅呀,筒子们~) 零基础入门移动自动 ...

  3. adb脚本选择语句_常用adb命令汇总(绝对干货)

    本文汇总了开发中常用的adb命令,熟悉这些命令在某些场景会极大的提高开发效率,绝对的干货.文中所有参数以$开头,实际使用时替换为真正参数即可. 一.启动/关闭类 启动activity 隐式action ...

  4. python中adb连接手机_Python脚本利用adb进行手机控制的方法

    如何使用python脚本调用adb shell里面的命令 python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回 ...

  5. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

  6. adb安装软件_安卓手表ADB实用工具箱:给你的安卓手表来点不一样的

    安卓手表ADB实用工具箱是由酷安开发者(ID@明风の岚 )开发的一款针对于安卓手表的工具箱,其基于ADB命令,用可视化的界面实现对安卓手表(同时也兼容(兼容安卓手机以及安卓系统的智能电视)进行一些操作 ...

  7. 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 ...

  8. adb shell 命令详解,android, adb logcat

    http://www.miui.com/article-275-1.html http://noobjava.iteye.com/blog/1914348 adb shell 命令详解,android ...

  9. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)

    课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...

最新文章

  1. Nginx实用指南V1 (连载之四:流行CMS博客rewrite写法)
  2. Leetcode PHP题解--D6 595. Big Countries
  3. 浏览器卡怎么办_【十全十美】宽带断线、wifi连不上怎么办?自助排障帮到你!...
  4. “Chrome不能访问更新服务器(错误:3)”的解决方法
  5. map/vector erase
  6. 解决GD中文乱码问题
  7. flask+apache2+ubuntu
  8. [原译]实现IEnumerable接口理解yield关键字
  9. 自动色彩均衡算法(ACE)原理及实现
  10. 华为HCIA(HCNA)笔记,还不快快收藏!
  11. 注册验证python_Python登录注册验证功能实现
  12. 中文TTS文字转语言合成模块
  13. 科技赋能时代 用ocr身份证识别
  14. 做电商直播绝不能忽视的事:主播人设和账号定位
  15. 样式的新建、修改和导入/导出
  16. 解决 animation.FuncAnimation 更新函数无反应的方法
  17. MSRA实习申请经验分享
  18. cloudflare免费证书_久违的百度云加速免费版终于支持 HTTPS 了!
  19. C语言-八道笔试题由浅入深玩转指针
  20. LED显示技术应用于智能交通领域的 3 个特点

热门文章

  1. Apache Hook机制解析(上)——钩子机制的实现
  2. centos7-yum安装与卸载
  3. 日本奥委会主席否认为争取奥运会主办权行贿
  4. Unencrypted connection refused. Goodbye. Connection closed by foreign host.
  5. 《大话操作系统——做坚实的project实践派》(3)
  6. C语言 · 约数个数
  7. Maven多模块项目使用MyBatis Generator
  8. spring aop 应用实例
  9. Oracle 中定位重要(消耗资源多)的SQL
  10. 最全的ASP.NET开源CMS汇总