ADB,即 Android Debug Bridge,它是Android开发/测试人员不可替代的强大工具,也是 Android设备玩家的好玩具。如果想更多了解ADB,可以查看一个开源项目Awesome Adb。本文不讲ADB的用法,只简单介绍下它的设计架构。

一.ADB代码地址

https://github.com/aosp-mirror/platform_system_core/tree/master/adb 

二.adb架构

adb-design

三.adb组件

1.adb server

adb server进程运行在主机后台。它的目的是要感知USB端口以了解设备何时连接/移除,以及模拟器实例何时启动/停止。

2.adb daemon (adbd)

adbd‘运行在Android设备/模拟器中中。其目的是连接到adb服务器(通过USB设备,通过TCP模拟器连接)并提供少许客户端运行在主机上的服务。 adb服务器连接adbd成功时则判断设备处于online状态,否则,该设备处于offline状态,这意味着adb服务器检测到新的设备/仿真器,但不能连接到adbd守护进程。

3.adb命令行客户端

主要用于adbshell环境或者脚本环境。它首先尝试在主机上找到adb服务器,如果没有找到,将自动启动一个。然后,客户端将其服务请求发送到adb server

4.服务

  • host service

这种类型的服务在adb server中运行因此不需要与客户端通信,比较典型的是”adb devices“这个指令,它只需要返回当前已知的设备列表跟状态即可。

  • local services 这些服务一般运行在adbd daemon中,或者运行在设备本身,他的角色包括创建clientserver端的连接,接着传输数据。

四.协议细节

1.Client <-> Server协议

adb server监听tcp:localhost:5037端口。下面以从客户端发送一个查询内部版本的指令过程举例,整个流程如下:

  • adb client连接到tcp:localhost:5037端口
  • client发送字符串”000Chost:version“等待响应
  • 大部分情况下任务结束后socket将保持alive状态,以备下次请求,除非指令会重定向到daemon进程中

2.Daemon <-> ServerTraceports协议)

目前traceports支持两种形式

  • USB Transports,用于物理层的USB连接
  • Local Traceports,模拟器通过TCP协议与主机连接