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服务器必须合理的处理好该传输模式异常断开的情况(比如,当一个设备被从主机拔掉的情况)。

  • 相关阅读:
    poj 3243 Clever Y(BabyStep GiantStep)
    poj 2417 Discrete Logging
    poj 3481 Double Queue
    hdu 4046 Panda
    hdu 2896 病毒侵袭
    poj 1442 Black Box
    hdu 2815 Mod Tree
    hdu 3065 病毒侵袭持续中
    hdu 1576 A/B
    所有控件
  • 原文地址:https://www.cnblogs.com/poptest/p/5073735.html
Copyright © 2011-2022 走看看