源码地址: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分为三个模块:
- 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博客