热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

老李推荐:第4章3节《MonkeyRunner源码剖析》ADB协议及服务:ADB协议概览

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,



本文档的目的是去文档化一个客户端请求ADB服务器往adbd守护进程发送文件相关的请求。请查看OVERVIEW.TXT文档去查看(ADB服务器和adbd守护进程)相关信息,查看SERVICES.TXT去学习其他更多的可用请求。

同步服务:



通过使用SERVICES.TXT描述的相关协议去请求同步服务( sync: )把连接设置成同步模式。这个模式也叫做二进制模式,它不同于正常的adb协议。当设置后连接会保持在这个模式之下直到被显式的终止掉(请查看下面描述)

在发起 sync: 命令去启动同步模式之后,服务器端必须如正常模式(请看OVERVIEW.TXT)般返回 OKAY 或者 FAIL 应答。

在同步模式中,服务器和客户端会频繁的使用8字节数据包来进行交互通信,这个在本文档中被称为 同步请求 和 同步应答 。最开始的4字节是一个指定的同步请求的id,这4个字节是用4个utf-8字符来呈现的。后面的4字节是一个小字节序的整数,使用比较广泛(多种多样),往下会被称作 长度 。事实上在同步模式中所有的二进制整数都是小字节序的。同步模式在每次同步请求完成后都会隐式的自动退出并进入到正常的adb通信模式,正常模式详情请查看SERVICES.TXT.

以下列出可接受范围内的所有同步请求:

LIST - 列出一个文件夹下面的所有文件

SEND - 往目标设备传送一个文件

RECV - 从目标设备获取一个文件

以下列出还没有真正文档化下来的同步请求:

STAT - 获取一个文件的各种状态属性

ULINK - 取消(删除)一个文件的连接。(还没有支持)

上面提及的所有的同步请求后面必须紧跟着由 长度 指定大小的字节来存储utf-8字串类型的远程文件名字。

LIST:

这个同步请求会列出 远程文件名 指定的目录下的所有文件。服务器端会返回0个以上的目录项或者也可以叫做 dents 。

目录项将会以以下的形式进行返回

一个4字节的id为 DENT 的同步返回

一个4字节代表文件(权限)模式的整数

一个4字节代表文件大小的整数

一个4字节代表最后修改事件的整数

一个4字节代表文件名长度的整数

长度 大小的包含一个以utf-8字串格式编码的文件名的字节码

当客户端接收到 DONE 这个同步返回之后,这个列出指定目录下所有文件的请求就算完成了。

SEND:

远程文件名在这种情况下会通过最后的一个逗号( , )划分成2部分,前面一部分代表真实的路径,而后面的第二部分是一个十进制形式的代表文件在目标设备的访问权限的文件模式属性。

注意有些文件类型在(adbd)把文件真正拷贝到目标目录之前或者在传送失败后会被删除掉。但也有一些文件类型是不会被删除掉,这样就允许

adb push disk_image /some_block_device

可以正常工作了(天地会珠海分舵注:否则如果adbd把接受到的文件处理完后删除掉了,就不能再把这个文件转发拷贝到目标块设备 some_block_device 去了)。

在发送了传送命令后真实的文件内容就可以通过块的方式进行传输了。每一个文件块会有以下的格式。

一个以id为 DATA 的同步请求命令以及紧跟着的等同于块大小的长度,然后紧跟着的是一个块大小的字节内容。文件的内容会以这种格式反复的传输直至整个文件传输完成。每一个块的大小不能大于64k。

当文件传输完成后一个 DONE 同步请求就会发送到目标机器(adbd),这种情况下请求的 长度 就会被设置成文件的最后修改时间。服务器最后在收到这个请求(注意不是每个数据块的发送请求)后会返回一个 OKAY 的同步应答(请求的 长度 可以忽略不管)

RECV:

这个请求的作用是从目标机器获取一个文件并保存到本地。请求的 远程文件名 设置的是要获取回来的远程文件名的路径。和上面的 SEND 同步请求一样,文件都是以文件块的方式进行传送的。同步返回格式中的id是 DATA , 长度 是块大小,然后紧跟着是指定块大小的字节数(文件内容)。同样每个块大小不能超过64k。

当文件传送完成后客户端就会获得一个 DONE 的同步请求,该请求的 长度 可以忽略不管。


   



推荐阅读
  • vue使用
    关键词: ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 006_Redis的List数据类型
    1.List类型是一个链表结构的集合,主要功能有push,pop,获取元素等。List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List的设 ... [详细]
author-avatar
粉红涩色
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有