老李推荐:第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. Cassandra 学习笔记 - 1 - 关于Cassandra

    摘要 - Cassandra 的历史 Cassandra能做什么 Apache Cassandra最早是Facebook为了改进他们的Inbox搜索功能,由Avanash Lakshman和Prash ...

  2. android学习12——重载SurfaceView一些方法的执行顺序

    先看代码 public class SurfaceViewActivity extends Activity { @Override public void onCreate(Bundle saved ...

  3. MVC - 单点登录中间件

    本章将要和大家分享的是一个单点登录中间件,中间件听起来高深其实这里只是吧单点登录要用到的逻辑和处理流程封装成了几个方法而已,默认支持采用redis服务保存session的方式,也可以使用参数Func& ...

  4. 理解javascript中参数的按值传递

    有人认为 JS 中参数传递:基本数据类型按值传递:引用类型按引用传递.呵呵 javascript中所有参数是按值传递的 但是当传入的参数是引用类型时,便带来了疑惑 引用类型值保存在内存中,而JS是不能 ...

  5. MySQL账户管理

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  6. 【转】jqGrid学习之介绍

    JQGrid JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做什么事情.   ...

  7. 数字化工厂解决方案——OA办公自动化与ERP

    移动办公APP/即时通讯 通过集成手机应用,将移动办公引入到企业信息化管理中,能随时随地的完成审批.查询.警报.知会.公告发布.KPI统计和信息推送.系统已经支持苹果系统.安卓系统和微软WP8系统.企 ...

  8. SQL server 数据库——数学函数、字符串函数、转换函数、时间日期函数

    数学函数.字符串函数.转换函数.时间日期函数 1.数学函数 ceiling()--取上限  select ceiling(oil) as 油耗上限 from car floor()--取下限 sele ...

  9. Node.js web快速入门 -- KoaHub.js组件koa-static-server

    koa-static-server Static file serving middleware for koa with directory, rewrite and index support k ...

  10. 简易漫画网站搭建-漫画喵Server版

    小喵的唠叨话:寒假的时候写了一个漫画爬虫,爬取了好几个漫画,不过一直没有找到合适的漫画阅读的工具.因此最近就试着自己写一个漫画的网站,放在公网上或者局域网里,这样就能随时随地用手机.Pad看漫画了. ...