android debug bridge包括3个部分:
1、client
运行在PC端
提供给用户的命令行工具,对用户暴露了install、push、shell等接口,与用户交互。
主要工作是解析这些命令的参数,做必要的处理,然后转为指令或者数据,发送给adb server端,adb server端再将指令数据转发到模拟器或者设备中,由adbd处理,产生结果,再通过adb服务端接收回来。
2、server
运行在PC端,是一个始终在后台运行的进程,ADB-server处理ADB client的请求,一部分请求无需与设备交互,直接在PC本地完成;剩下的请求需要与设备端的adbd交互。
ADB server为每一个连接的设备分配一个状态值,状态值包括:OFFLINE, BOOTLOADER, RECOVERY, ONLINE
OFFLINE表示adb server侦测到一个新的设备或者模拟器,但是无法与该设备或模拟器上的adbd守护进程建立连接。
3、daemon
运行在设备端的常驻进程,同时只存在一个。作用是接收PC端的ADB server发过来的请求,并作出响应。
在没有安装android相关tool之前,执行lsusb能看到连接上的usb设备的信息。
在ubuntu上执行sudo apt-get install android-tools-adb
如果需要安装fastboot apt-get install android-tools-fastboot
adb kill-server
adb start-server
adb devices
adb get-state
adb get-serialno
adb pull remote local
adb push local remote
adb wait-for-device
adb shell
附上一篇博客讲adb命令的:http://blog.csdn.net/jiaju_cao/article/details/7777929
Adb server对本地的tcp 5037号端口进行监听,等待adb client的命令。
Client的每个命令都会包含两个部分:前一部分固定4个字节,以十六进制方式指定命令部分的长度。后一部分是真正的内容。
例如想要获取adb server的版本号,
client首先连接本机的tcp 5037端口,然后发送”000c”和”host:version”
Server对client回复,分为如下情况:
1)成功,回复4字节”OKAY”,后面跟的内容随命令不同而不同。
2)失败,回复4字节”FAIL”,后面跟4字节的十六进制长度,以及失败的原因。
具体的命令如下:
下面的命令仅仅用于已经连接到某个设备,即上面命令使用成功,连接到特定设备后,向特定设备发送命令,操纵特定设备。
http://blog.csdn.net/evilcode/article/details/6904200
http://blog.csdn.net/liranke/article/details/4999210
adbd源码位于system/core/adb目录下,可执行文件位于/sbin/adbd
output线程和input线程的引入主要是为了解决usb endpoint不支持非阻塞读写,所以专门为读操作开了一个output线程,为usb写操作创建一个input线程,数据流的方向是远程连接->output线程->主线程->input线程->远程连接。
刚开始的时候output线程会发送一个SYNC消息给input线程,启动这个transport。
附上讲解adb源码的博客:
http://blog.csdn.net/new_abc/article/details/7467537
http://blog.sina.com.cn/s/blog_6f561cc301018eam.html
http://blog.csdn.net/vastyh/article/details/8154932
adb_socketpair 向系统申请一对socket,给他们建立一个管道,供通信
fdevent.c文件,他其实就是文件监听事件管理,只要利用fdevent_install注册到他的管理后,当注册的文件有里面有活动的时候,表述有读或者是写,这里是transport_registration_recv,就会触发func,这里的func就是transport_registration_func。
install_listener
在里面申请一个alistener对象,建立监听5037端口的server,但有数据到来时,就建立一个socket。
收到command后流程
http://www.jizhuomi.com/android/environment/215.html
http://blog.csdn.net/u010223349/article/details/41120255
http://blog.csdn.net/xiaojsj111/article/details/18599653