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

 

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

关于ADB的实现记录。

I. 概览


安卓调试桥(ADB)是用来: 跟踪管理所有连接上或者运行在开发主机上的安卓设备或者模拟器实例。

其实现了各种控制命令(比如: “adb shell”,”adb pull”,等等…)来为各种客户端(命令行用户,或者如DDMS等开发助手之类的程序)提供便利。这些命令其实就是ADB中所谓的“服务”了。

总的来说,所有工作都是在以下各个组件中完成的:

1. ADB服务器


这是一个运行在主机端的后台守护进程。该进程的目的是去感知(监控)USB端口是否有设备挂载或者移除掉,当然也包括对模拟器实例启动和关闭的监控了。

所以它维护了一系列”已连接设备”的信息,并且每个已连接设备都会被赋予以下的一个状态:OFFLINE,BOOTLOADER,RECOVERY或者ONLINE(往后还会有更多其他状态的支持)。

ADB服务器确实可以号称为一个强大的多路路由,它的目的就是像路由一样去协调ADB命令行客户端,服务,和设备之间的数据(事实上是数据包)交换。

2. ADB守护进程(adbd)


“adbd”是作为一个后台守护进程运行在目标安卓设备或者模拟器系统上面的。他的目的是跟主机端的ADB服务器进行连接(真实设备使用USB连接,模拟器通过TCP进行连接)以为运行在主机端的客户端提供一些服务。(译者注: 其实真实机器也可以通过TCP进行连接)

当ADB服务器连接上一个目标设备的adbd守护进程的时候,ADB服务器就会认为该设备是ONLINE状态的。反之,该设备就被认为是OFFLINE状态,代表ADB服务器可以侦查到一个设备/模拟器,但是不能连接上它的adbd守护进程。

BOOTLOADER和RECOVERY状态是和设备是处于引导状态还是修复状态这两个交替状态中的一个相对应的。

3. ADB命令行客户端


‘adb’命令行客户端是用来在一个shell或者脚本中运行adb命令的程序。它首先会尝试定位主机上的ADB服务器,如果发现ADB服务器没有起来的话会尝试把它启动起来。

定位到已经启动的ADB服务器后,该adb命令行客户端就会将它的服务请求命令发送到ADB服务器。它不需要知道ADB服务器处理该服务请求的任何细节。

迄今为止,同一个‘adb‘二进制文件是同时作为ADB服务器和客户端使用的。这样做的好处是让ADB服务器的发布和启动变得更方便。

4. 服务


本质上客户端会跟这里的两种类型的服务进行交互通信。

主机服务:


这些服务完全是运行在ADB服务器内部的,所以根本不需要和任何目标安卓设备进行通信。一个典型的例子就是用来获得一系列当前连接上来主机的设备信息和状态的命令”adb devices”。当然还有不少的一些其他的服务了。

本地服务:


这些服务或许是在目标设备的adbd守护进程内部运行,或许是由adbd启动运行。 ADB服务器在这里扮演的角色就是在运行在客户端和由adbd守护进程运行的服务之间充当一个多路数据流的路由。在这种情况下,ADB服务器会对adbd守护进程和ADB命令行客户端之间的连接进行初始化,然后在他们之间进行数据接力传递。

老李推荐:第4章1节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览 1的更多相关文章

  1. 老李推荐:第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结

    老李推荐:第6章8节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-小结   本章我们重点围绕处理网络过来的命令的MonkeySourceNetwork这个事 ...

  2. 老李推荐:第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例

    老李推荐:第6章7节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-注入按键事件实例   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜 ...

  3. 老李推荐:第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列

    老李推荐:第6章6节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令队列   事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些 ...

  4. 老李推荐:第6章4节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串

    老李推荐:第6章4节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-翻译命令字串   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自 ...

  5. 老李推荐:第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件

    老李推荐:第6章5节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-事件   从网络过来的命令字串需要解析翻译出来,有些命令会在翻译好后直接执行然后返回,但有 ...

  6. 老李推荐:第6章3节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令翻译类

    老李推荐:第6章3节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-命令翻译类   每个来自网络的字串命令都需要进行解析执行,只是有些是在解析的过程中直接执行 ...

  7. 老李推荐:第6章2节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-获取命令字串

    老李推荐:第6章2节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览-获取命令字串   从上一节的描述可以知道,MonkeyRunner发送给Monkey的命令 ...

  8. 老李推荐:第6章1节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览 2

    事件要到那里去? 每个事件源处理类都维护着一个自己的事件队列, 在Monkey中叫做CommandQueue,里面装的是每个具体的MonkeyEvent事件.当来自网络的字串命令被翻译成对应的Monk ...

  9. 老李推荐:第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件

    老李推荐:第14章9节<MonkeyRunner源码剖析> HierarchyViewer实现原理-遍历控件树查找控件   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员 ...

  10. 老李推荐:第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态

    老李推荐:第14章5节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态   poptest是国内唯一 ...

随机推荐

  1. 纪中集训 Day 3

    这几天一直坚持写blog= =加油吧!! 早上醒来,说了"我要AK"(其实只是蒟蒻的妄想罢了QAQ) 然后为了不立flag,改成了我要rank 1 然后依旧是有一题不会做QAQ 好 ...

  2. MSSQL数据批量插入优化详细

    序言 现在有一个需求是将10w条数据插入到MSSQL数据库中,表结构如下,你会怎么做,你感觉插入10W条数据插入到MSSQL如下的表中需要多久呢? 或者你的批量数据是如何插入的呢?我今天就此问题做个探 ...

  3. 【CNMP系列】CentOS7.0下安装MySql5.6服务

    接上一回的话,CentOS7.0下安装好了Nginx服务,对于我们的CNMP,我们可以开始我们的M啦,就是传统意义上的MySql服务 MySql简介 MySQL是一个关系型数据库管理系统,由瑞典MyS ...

  4. C#之系统异常处理机制

    在系统开发过程中,BUG和异常产生是无处不在的,但是需要我们去做的就是不断去发掘异常.修改异常. 这篇文章主要谈谈我在系统中解决异常的几种方法: 1.控制台程序产生的异常: 在大多数的控制台程序中,运 ...

  5. scss 学习笔记

    由于没有办法在网络上找到适合顾客的模板,同时之前自己写css也没有很好的管理方式,最终选择了scss. Nested #main p { color: #00ff00; width: 97%; .re ...

  6. angular : direative : scope | 指令scope里的符号@,=

    先看看以下的代码 <body ng-app="app" ng-controller="ctrl"> <dir myname="nam ...

  7. tcp粘包和拆包的处理方案

    随着智能硬件越来越流行,很多后端开发人员都有可能接触到socket编程.而很多情况下,服务器与端上需要保证数据的有序,稳定到达,自然而然就会选择基于tcp/ip协议的socekt开发.开发过程中,经常 ...

  8. SQLDataSet中执行DDL语句

    在SQLDataSet中执行我们输入的DDL语句,并观察执行结果. 这里为了省输入的时间,从先输好的记事本中复制的SQL语句.效果图: ******************************** ...

  9. web微信开发前期准备最新详细流程

    一.申请配置测试公众号与配置本地服务器   1.打开浏览器,输入:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,微信扫码确 ...

  10. iOS基础之顺传逆传传值(delegate、block)

    写给iOS新手的福利! 在项目中经常会用到传值,根据传值的方向分为顺传(从根控制器到子控制器)和逆传(从子控制器到根控制器).在这里写了个Demo简单演示了效果,创建了两个控制器: 一个为根控制器,一 ...