adb 源码分析(1)

adb 分为三部分  一部分是adb-server 一部分是adb_command 这两部分运行在电脑主机上,通过socket通信,adb-server监听在127.0.0.1:5037端口(注意adb-server和adb_command对应同一个可执行文件adb),另外一部分是adbd,运行在手机端

下面分三个情景去描述adb的电脑端的源码

1.首次使用adb命令触发adb-server启动

首次使用adb命令触发adb-server启动


2 adb-server启动以及初始化通信环境

 初始化通信环境

device_poll_thread里面调用了两个函数find_usb_devices, kick_dsconnected_devices,这些都和操作usb驱动相关,find_device应该是在usb总线上寻找手机的usb链接

,注意这里注册的时候action=1,写入之前打开的socket对,另外一端就可读了,就会调用transport_registration_func回调。transport_registration_func又创建socket对,

创建两个线程,分别执行write_transport_thread 和read_transport_thread,将transport添加到transport_list。 这两个函数用于关注usb设备的可读写事件,并做出处理。

注意读取和写入的逻辑在atransport中注册了回调函数,为什么在这里注册?因为有可能是通过usb读写,也可能是通过socket读写,在这里进行解耦。

这样就形成了五个函数进行通信处理,这五个函数运行在三个线程之中:分别功能见下图

通信组件
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 注册完三个通信函数和连个线程之后,就调用函数install_listener在5037端口进行监听,然后将这个服务...
    4528283108ee阅读 1,576评论 0 0
  • 前面的内容请参见Android应用自动化测试-提纲。 这篇我们将介绍在Android SDK中一个非常关键的工具,...
    城下秋草阅读 4,624评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,967评论 19 139
  • 如果说只有一件东西留下,那可能就是生命,如果还能留下一样,那必定是健康。 人们只有在失去的时候才能够明白曾经拥有的...
    杨艺瀚阅读 198评论 0 0
  • 过了多少年,这条路一直没变。它运载着风车,承接新春的风;它反射着阳光,对天微笑;它寄托着期望,带着梦飞向远方…… ...
    醉酒的蜗牛阅读 378评论 1 1