ADB, Android Debug Bridge, 是一个client-server程序,可以用来和安卓设备交流
Client: 用来发送命令的,client运行在开发机器上(电脑cmd, adb shell), ddms也可以创建adb client
Daemon(adbd): 手机上的一个后台进程,用来执行adb命令的
Server:运行在pc上,用来管理client和dameon的交流(which manages communication between the client and the daemon)
client(commond) to server, server to dameon(手机执行命令)
ADB怎么工作
1.当启动adb client的时候,client会首先检查adb server是否已经在运行,如果没有,会先启动adb server
2.server启动之后,会绑定一个本地的TCP端口5037,然后会监听来自adb client发来的所有命令,adb client使用的都是5037端口来和server交流
3.server会和手机设备建立连接,server会在端口号5555到5585之间的单数的端口里查找手机。当server找到手机上的adb daemon的时候,server会对那个端口建立连接。要注意的是,每个手机设备(或者模拟器)都需要一对连续的端口号,一个偶数的端口号是console用的,一个单数的端口号是adb用的,比如
Emulator 1, console: 5554
Emulator 1, adb: 5555
Emulator 2, console: 5556
Emulator 2, adb: 5557
and so on...
4.一旦server与手机建立连接,你就可以使用adb命令去操作手机。因为server可以管理与手机设备的连接,还有处理来自各个adb client的命令。这样,你就可以通过任何client(脚本)去控制手机
所有的client通过TCP端口号5037进行与server通信,而server创建local socket与remote socket,前者用于和client通信,后者用与远端(adbd)进行通信,emulator通过TCP,real device则通过usb。
三者通信整个流程是这样的:
a、client调用某个adb命令
b、adb进程fork出一个子进程作为server
c、server查找当前连接的emulator/device
d、server接收到来自client请求
e、server处理请求,将本地处理不了的请求发给emulator/device
f、位于emulator/device的adbd拿到请求后交给对应的java虚拟机进程。
g、adbd将结果发回给server
h、server讲结果发回给client
参考:https://developer.android.com/studio/command-line/adb.html