adb源码(1):工作原理

源码地址:https://android.googlesource.com/platform/system/core/+/refs/tags/android-6.0.0_r5/adb/
抓包:https://itimetraveler.github.io/2019/06/07/Android%20ADB原理探究/

adb分为三个模块:

image

  • client :用于发送命令,运行在计算机上,比如在 terminal 中输入 adb 命令,实际上调用的是 client 。
  • adb daemon (adbd) :用于接收命令,在移动设备上后台运行。
  • server :管理 client 和 adb daemon 之间的通信,在计算机上后台运行。

工作模式

在命令行输入 adb 时,会调起 client ,client 会检测 server 是否存在,如果不存在就启动 server 并绑定 TCP 的 5037 端口,监听从 clients 发来的命令,这里用s是因为可能有多个 client ,这些 client 都使用 5037 端口与 server 交互。

server 会和所有移动设备建立连接,它通过奇数端口寻找设备,比如 5555~5585 的奇数端口通常用于前 16 个设备。如果 server 发现了 adb daemon(adbd),就会和这个端口建立连接。每个设备使用一对连续的端口,一个偶数端口用于控制台连接,一个奇数端口用于 adb 连接,比如

Emulator 1, console: 5554
Emulator 1, adb: 5555
Emulator 2, console: 5556
Emulator 2, adb: 5557
and so on...

模拟器使用 5555 端口连接 adb ,控制台会监听 5554 端口。只要 server 与所有设备建立了连接,就可以用 adb 命令访问这些设备。

todo:源码

todo:解释5555端口,Android 经验: 本地 5555 端口会被 adb 误认为 emulator_adb端口5555_span76的博客-CSDN博客

1 个赞