热门标签 | 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 的同步请求,该请求的 长度 可以忽略不管。


   



推荐阅读
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 本文详细探讨了在ASP.NET环境中通过加密数据库连接字符串来提升数据安全性的方法。加密技术不仅能够有效防止敏感信息泄露,还能增强应用程序的整体安全性。文中介绍了多种加密手段及其实施步骤,帮助开发者在日常开发过程中更好地保护数据库连接信息,确保数据传输的安全可靠。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • MySQL数据库安装图文教程
    本文详细介绍了MySQL数据库的安装步骤。首先,用户需要打开已下载的MySQL安装文件,例如 `mysql-5.5.40-win32.msi`,并双击运行。接下来,在安装向导中选择安装类型,通常推荐选择“典型”安装选项,以确保大多数常用功能都能被正确安装。此外,文章还提供了详细的图文说明,帮助用户顺利完成整个安装过程,确保数据库系统能够稳定运行。 ... [详细]
  • 在拉斯维加斯举行的Interop 2011大会上,Bitcurrent的Alistair Croll发表了一场主题为“如何以云计算的视角进行思考”的演讲。该演讲深入探讨了传统IT思维与云计算思维之间的差异,并提出了在云计算环境下应具备的新思维方式。Croll强调了灵活性、可扩展性和成本效益等关键要素,以及如何通过这些要素来优化企业IT架构和运营。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • 本文深入探讨了Ajax的工作机制及其在现代Web开发中的应用。Ajax作为一种异步通信技术,改变了传统的客户端与服务器直接交互的模式。通过引入Ajax,客户端与服务器之间的通信变得更加高效和灵活。文章详细分析了Ajax的核心原理,包括XMLHttpRequest对象的使用、数据传输格式(如JSON和XML)以及事件处理机制。此外,还介绍了Ajax在提升用户体验、实现动态页面更新等方面的具体应用,并讨论了其在当前Web开发中的重要性和未来发展趋势。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 如何轻松地将多个文件导入Python:简明指南 ... [详细]
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社区 版权所有