adb 分为三部分 一部分是adb-server 一部分是adb_command 这两部分运行在电脑主机上,通过socket通信,adb-server监听在127.0.0.1:5037端口(注意adb-server和adb_command对应同一个可执行文件adb),另外一部分是adbd,运行在手机端
下面分三个情景去描述adb的电脑端的源码
1.首次使用adb命令触发adb-server启动
2 adb-server启动以及初始化通信环境
device_poll_thread里面调用了两个函数find_usb_devices, kick_dsconnected_devices,这些都和操作usb驱动相关,find_device应该是在usb总线上寻找手机的usb链接
,注意这里注册的时候action=1,写入之前打开的socket对,另外一端就可读了,就会调用transport_registration_func回调。transport_registration_func又创建socket对,
创建两个线程,分别执行write_transport_thread 和read_transport_thread,将transport添加到transport_list。 这两个函数用于关注usb设备的可读写事件,并做出处理。
注意读取和写入的逻辑在atransport中注册了回调函数,为什么在这里注册?因为有可能是通过usb读写,也可能是通过socket读写,在这里进行解耦。
这样就形成了五个函数进行通信处理,这五个函数运行在三个线程之中:分别功能见下图