adb源码 笔记
来源:互联网 发布:top域名soho网站 编辑:程序博客网 时间:2024/04/26 06:56
ADB-server
运行在PC端,是一个始终在后台运行的进程,作为与手机端交互的唯一接口。ADB-server处理ADB-client的请求,一部分请求无须与设备交互,直接在PC本地完成;剩下的请求需要与设备端的adbd交互,ADB-server起到了一个switcher的作用。
ADB-client
运行在PC端,可以同时存在多个。每个ADB-client由用户启动,完成多种功能。其作用是与ADB-server交互,实现用户请求的功能。
adbd
运行在设备端的常驻进程,同时只存在一个。作用是接收PC端的ADB-server发来的请求,并作出对应操作。
这三个可执行程序都是同一套代码编译出来的,位于<Android Source Dir>/system/core/adb/
在adb源码中找到了:
#define DEFAULT_ADB_PORT 5037
#define DEFAULT_ADB_LOCAL_TRANSPORT_PORT 5555
#define ADB_CLASS 0xff
#define ADB_SUBCLASS 0x42
#define ADB_PROTOCOL 0x1
其中,class,subclass,protocol对应的是“USB\\Class_FF&SubClass_42&Prot_01”中的FF,42和01,果然代码里有大部分的信息。
service用了一个结构体asocket保存了用于连接的两个socket,这个socket对一个是本地的,一个是设备上的,也就是service接收到本地socket的数据会将收到的数据发向这个结构中对应的设备的socket。
atransport,用于传输数据的对象,可以设置成不同类型,而分别与本地或usb设备进行数据传输。本地用的是socket 文件描述符,usb设备用的是usb连接的句柄。
alistener是一个结构,只保存了一些数据 , 当socket监听收到连接请求时用于绑定本地端口和请求端口。
usb通信的部分是通过adb_api,就是那两个dll里的代码,它们用到了DeviceIoControl来与设备通信
fdevent 用一个结构体,保存了事件及事件处理的函数的指针。
adb 启动时会先检查是否有设置相关的环境变量,有ANDROID_PRODUCT_OUT,ANDROID_SERIAL,ANDROID_ADB_SERVER_PORT,主要是port,如果没有port将会使用5037这个端口。然后adb客户端会尝试发送版本检查的信息,如果返回-2,说明服务端没有启动,就获取自身所在的路径,以服务端的参数启动一个服务进程,这个进程与原adb是同一个程序。
0 0
- adb源码 笔记
- Adb笔记
- ADB笔记
- ADB笔记
- adb笔记
- Adb源码学习
- Adb源码学习
- adb源码路径
- ADB 源码分析
- adb源码分析(一)
- adb源码分析
- adb命令笔记
- 【安卓笔记】adb
- android笔记 adb命令
- Android学习笔记【ADB】
- ADB常用命令笔记
- adb 使用问题笔记
- Android ADB命令笔记
- 百度地图坐标转换
- C#实现Web文件上传
- 苹果发布iPad Air及视网膜屏iPad mini
- 欧拉函数
- js 单链表翻转
- adb源码 笔记
- eclipse简单设置避免遗忘break(switch case)
- 联想M495无法进入PE
- Linux19-防火墙iptables的配置
- 使MFC窗口的最大化和最小化按钮消失
- C语言的编译链接过程详解
- getline成员函数分析
- eclipse 查看原始类出现The jar file rt.jar has no source attachment解决方法
- JAVASCRIPT加密解密