1、在HOST端,adb会fork出一个守护进程(不是adbd),即server,而父进程继续处理client请求,所有的client通过TCP端口号5037进行与server通信,而server创建local socket与remote socket,前者用于和client通信,后者用与远端进行通信,emulator通过TCP,real device则通过usb。
2、在emulator/device端,adbd也创建local socket和remote socket,前者与通过jdwp与Java虚拟机进层通信,后者通过TCP/USB与HOST通信。
因此整个流程应该是这样的:
1、client调用某个adb命令。
2、adb进程fork出一个子进程作为server。
3、server查找当前连接的emulator/device。
4、server接收到来自client请求。
5、server处理请求,将本地处理不了的请求发给emulator/device。
6、位于emulator/device的adbd拿到请求后交给对应的java虚拟机进程。
7、adbd将结果发回给server。
8、server讲结果发回给client。
如下图: