zoukankan      html  css  js  c++  java
  • 老李推荐:第4章1节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览 2

    II. 协议详情


    1. 客户端<->服务器端协议


    以下是对ADB客户端和ADB服务器自身之间通信所用到的协议的详细描述。ADB服务器监听的TCP端口是localhost:5037。

    客户端会使用下面的格式往ADB服务器发送服务请求:

    1. 一个包含指定服务请求数据长度的4字节的16进制字串

    2. 紧跟着该4个字节的就是服务请求数据自身

    比如,为了查询ADB服务器的内部版本号,客户端会做以下的动作:

    1. 连接到ADB服务器监听的本地Socket端口tcp:localhost:5037

    2. 发送一个服务请求字串”000Chost:version”到上面对应的Socket

    ‘host:’这个前缀是用来指示该服务请求是一个主机请求,是一个放松给ADB服务器自身的请求(往下我们会讨论其他的一些类型的请求)。为了方便调试,请求内容长度是以ASCII码的方式进行编码的。

    ADB服务器应该用以下格式中的一个对客户端的服务请求进行应答:

    1. 如果服务请求成功,返回一个4字节的”OKAY”字串

    2. 如果服务请求失败的话,返回结果字串的前面是由一个4字节的”FAIL”字串组成,紧跟着该字串后面的是一个代表后面的数据长度的4字节的十六进制数,最后紧跟着的就是描述错误原因的字串内容。

    3. 作为一个例外,对于’host:version’这个服务请求,返回的结果将是一个对应ADB服务器内部版本号的4字节的十六进制字串。

    需要注意的是,在服务请求完成,且ADB服务器已经回应了OKAY这个成功代表服务请求成功的应答后,ADB服务器和服务请求客户端之间还是保持在连接状态的,这样就让客户端可以紧接着发送其他的服务请求了。但在一些特别的情况下,ADB服务器的一个OKAY应答将会改变连接的状态。

    比方说,以‘host:transport:’这个服务请求为例,这里的’‘的作用是用来标识一个已定的设备/模拟器;在服务请求成功,ADB服务器返回‘OKAY’应答给客户端后,所有客户端紧跟着发送的服务请求都会直接发送到对应设备(由上面服务请求命令中的指定的设备)的adbd守护进程。

    文件SERVICES.TXT列出了当前ADB已经实现的所有的服务。

    2. 传输模式


    一个ADB的传输模式代表的是一个ADB服务器和目标设备或者模拟器之间的连接模型。

    • USB传输模式,应用在物理设备通过使用USB协议连接到主机端的ADB服务器的的情况

    • 本地传输模式, 应用在运行在主机上的模拟器通过TCP协议和ADB服务器连接的情况

    理论上来说,编写一个本地传输模式来实现ADB服务器和连接到/运行在另外一台主机的安卓设备/模拟器的连接代理是可行的。但这个现在还没有完成。(译者注: 这份文档google开发人员应该是没有及时更新,因为以4.4.2版本为例,我们是可以通过‘adb connect’命令连接到同一局域网内任意一台设备或者模拟器的)

    每个传输模式都可以承载客户端和客户端指向的目标安卓设备/模拟器的一路或者多路数据流。ADB服务器必须合理的处理好该传输模式异常断开的情况(比如,当一个设备被从主机拔掉的情况)。

  • 相关阅读:
    【NOIP16提高组】换教室
    【扬中集训Day6T1】 白日梦
    【POJ 1061】 青蛙的约会
    【扬中集训DAY5T1】 交换矩阵
    【USACO】 Balanced Photo
    【USACO】 Balanced Lineup

    POJ P3352 Road Construction 解题报告
    洛谷 P2783 有机化学之神偶尔会做作弊 解题报告
    洛谷 P2300 合并神犇 解题报告
  • 原文地址:https://www.cnblogs.com/poptest/p/5073735.html
Copyright © 2011-2022 走看看