自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Techgogogo

做个有追求的全栈程序员。当前在做的产品-晓日程: http://xricheng.com。自主博客: http://techgogogo.com; 最新动向: 回炉重造高数线代概论,为机器学习打基础...

翻译 破坏性创新第一原则

如果在位者的关键用户们没有尽其所能的去揶揄你在打造的产品是如何的功能匮乏的话,那么,你的这个产品没有足够的破坏力...

2015-12-23 13:23:16

阅读数 1485

评论数 1

翻译 云端办公?除了访问不了的谷歌和付费的微软,您其实还有其他选择

LibreOffice的商业合作伙伴Collabora和ownCloud共同发布了一个在线LibreOffice版本,其中ownCloud是一个类似Dropbox的开源文件存储和共享系统(其实就是一私有云产品)...

2015-12-17 10:14:43

阅读数 1709

评论数 0

翻译 如日中天的Uber究竟是用什么开发语言做到的?

Uber的网站可靠性工程师Tom Croucher在最近于波兰举行的Node.js互动大会上详尽的对该公司所用的语言平台进行了阐述...

2015-12-17 10:04:35

阅读数 2112

评论数 1

翻译 2分钟读懂大数据框架Hadoop和Spark的异同

谈到大数据,相信大家对Hadoop和Apache Spark这两个名字并不陌生。但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考...

2015-12-17 09:55:35

阅读数 2687

评论数 3

翻译 谁在吞噬着这个世界

Marc Andreessen曾抛出著名的言论说:“软件正在吞噬着整个世界”,这句话如今在IT界可谓是无人不知,无人不晓。同样是做风投的同行John Vrionis更进一步的断言说:“开源软件正在吞噬着整个世界”。那么何出此言?John是在大放阙词呢?还是言之有理呢?

2015-12-17 09:46:34

阅读数 1675

评论数 0

原创 第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件

到了现在,万事已经俱备,控件树这个东风也已经就绪了,我们也终于可以火烧赤壁大展拳脚,通过控件的ID在控件树中找到我们想要的控件了。 HierarchyViewer只允许用户通过控件的ID去查找控件,这比Robotium,UiAutomator和Appium这些框架是少了很多查找控件的方式的,但聊胜...

2015-12-08 11:02:18

阅读数 1965

评论数 1

原创 第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树

在上几节的描述中,我们把HierarchyViewer初始化好,也把ViewServer给装备好了。那现在距离获得一个控件去操作它是万事具备只欠东风了,欠了那一股春风了?欠了的是建立控件树这个东风,因为HierarchyViewer根据ID去获取一个控件之前是需要先建立好控件树,然后从该控件树上根...

2015-12-08 11:01:46

阅读数 1945

评论数 0

原创 第14章7节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-获取版本号

这里获取的版本号有两个,一个是ViewServer自身的版本号,一个是ViewServer当前使用协议的版本号。 我们这里为什么需要获取ViewServer版本以及其协议版本呢?其实主要原因是ViewServer有些功能在老版本上是不支持的,比如HierarchyViewer在列出当前所有Acti...

2015-12-08 11:00:57

阅读数 1715

评论数 0

原创 第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer

在获得ViewServer的运行状态后,如果ViewServer还没有启动的话,HierarchyViewer的setupViewServer的下一步就会去启动ViewServer。调用的方法是DeviceBridge.startViewServer,我们进去看看:190 public s...

2015-12-08 11:00:24

阅读数 1704

评论数 0

原创 第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态

上一小节我们描述了HierarchyViewer是如何组建ADB协议命令来实现ViewServer的端口转发的,在端口转发设置好后,下一个要做的事情就是去检测目标设备端ViewServer线程是否已经启动起来了。我们进入setupViewServer调用的DeviceBridge的isViewSe...

2015-12-08 10:59:54

阅读数 1654

评论数 0

原创 第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发

在初始化HierarchyViewer的实例过程中,HierarchyViewer会调用自己的成员方法setupViewServer来把ViewServer装备好,那么我们这里先看下这个方法: 39 private void setupViewServer() { 40 ...

2015-12-08 10:57:43

阅读数 1578

评论数 0

原创 第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化

既然要使用HierarchyViewer来获取控件信息,那么首先我们看下在脚本中,我们是怎么获得HierarchyViewer的,看下面一段脚本代码:1 device = MonkeyRunner.waitForConnection() 2 device.wake() 3 device.sta...

2015-12-08 10:56:02

阅读数 1627

评论数 0

原创 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述

HierarchyViewer库的引入让MonkeyRunner可以以面向控件的方式进行脚本编写,那么它是怎么做到这一点的呢?它的实现原理又是怎么样的呢?在这一小节开始我们就会开始一起揭开它的神秘面纱。 HierarchyViewer这个框架的工作需要ViewServer的协同工作,它们是以CS(...

2015-12-08 09:18:28

阅读数 1812

评论数 0

原创 第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程

到此为止我们描述的MonkeyRunner对应用的点击拖放等操作都是直接通过指定坐标点来实现的,比如下面触摸一个坐标点为(60,90)的按钮的脚本例子:1 device.touch(60,900,MonkeyDevice.DOWN_AND_UP)代码14-1-1 直接使用坐标点操作应用  这样子做...

2015-12-08 09:17:42

阅读数 1458

评论数 0

原创 第8章7节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-小结

最后我们对MonkeyRunner启动的过程做一个总结,当然,其中也包括启动Monkey,虽然它不属于启动过程的一部分:monkeyrunner这个shell脚本会先设置一些运行环境的系统属性保存到JVM的System.Propery里面然后该脚本会通过java -jar直接运行sdk下面的mon...

2015-12-08 09:16:19

阅读数 1242

评论数 0

原创 第8章6节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动Monkey

大家可能会觉得奇怪,为什么启动目标设备端的monkey进程会放在“运行测试脚本”这一节之后来阐述。 纵观前面整个MonkeyRunner的启动流程,我们看到并没有提及到monkey进程启动的地方。那么就奇怪了,monkey是什么时候被MonkeyRunner启动起来的呢? 我们的测试脚本一开始时几...

2015-12-08 09:15:42

阅读数 1517

评论数 0

原创 第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本

MonkeyRunner在准备好AndroidDebugBridge和DeviceMonitor等服务之后,就基本上是解决了和目标设备通信的问题了,那往下需要做的就是把测试脚本运行起来了。178 public static void main(String[] args) { 179 ...

2015-12-08 09:15:14

阅读数 1402

评论数 0

原创 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge

上一节我们看到在启动AndroidDebugBridge的过程中会调用其start方法,而该方法会做2个主要的事情:715行startAdb:开启AndroidDebugBridge722-723行:初始化android设备监控并启动DeviceMonitor设备监控线程。 其中第一点我们上一小节...

2015-12-08 09:14:34

阅读数 1810

评论数 0

原创 第8章3节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge

用户在命令行运行monkeyrunner命令来执行测试脚本的时候ADB服务器有可能还没有起来,AndroidDebugBridge类的主要作用之一就是去开启一个新的进程来启动ADB服务器,这样我们的测试脚本才能发送命令给ADB服务器去驱动目标设备做事情,比如安装或者删除待测应用的安装包等。 Mon...

2015-12-08 09:13:40

阅读数 1397

评论数 0

原创 第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数

MonkeyRunnerStarter是MonkeyRunner启动时的入口类,因为它里面包含了main方法.它的整个启动过程主要做了以下几件事情:解析用户启动MonkeyRunner时从命令行传输进来的参数: 因为MonkeyRunner需要根据指定的参数才能做事情,比如输入的一个需要执行的脚本...

2015-12-08 09:13:01

阅读数 1475

评论数 0

原创 第8章1节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行环境初始化

首先大家应该清楚的一点是,MonkeyRunner的运行是牵涉到主机端和目标设备端的,流程控制逻辑代码是在PC端运行的,但很多命令请求的执行是在目标机器端执行的。这不像其他框架如UiAutomator是所有东西都完全在目标设备端运行的。 这里我们首先应该去看的不是MonkeyRunnerStart...

2015-12-08 08:45:05

阅读数 1084

评论数 0

原创 第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结

本章我们重点围绕处理网络过来的命令的MonkeySourceNetwork这个事件源来阐述学习Monkey是如何处理MonkeyRunner过来的命令的。以下总结下MonkeyRunner从启动Monkey开始到如何处理完成一个命令的流程总结如下:MonkeyRunner通过ADB发送shell命...

2015-12-08 08:44:11

阅读数 1079

评论数 0

原创 第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例

在事件生成并放入到命令队列后,Monkey类的runMonkeyCycles就会去调用相应事件源的getNextEvent来获的事件来执行事件注入,那么这一小节我们通过MonkeyKeyEvent这个事件的注入方法来看下事件注入过程是怎么样的。 往系统注入按键事件最终是通过调用InputManag...

2015-12-08 08:43:19

阅读数 1220

评论数 0

原创 第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列

事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些事件排队放入一个由事件源维护的队列,然后其他地方如Monkey类的runMonkeyCycles方法就可以去把队列里面的事件取出来进一步进行处理了。那么这里我们先看下属于MonkeySourceNetwork内部类的命令队...

2015-12-08 08:42:31

阅读数 1013

评论数 0

原创 第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件

从网络过来的命令字串需要解析翻译出来,有些命令会在翻译好后直接执行然后返回,但有一大部分命令在翻译后需要转换成对应的事件,然后放入到命令队列里面等待执行。Monkey在取出一个事件执行的时候主要是执行其injectEvent方法来注入事件,而注入事件根据是否需要往系统注入事件分为两种:需要通过系统...

2015-12-08 08:41:39

阅读数 1199

评论数 0

原创 第6章4节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串

在第2节中我们看到了MonkeySourceNetwork是如何从Socket中获取MonkeyRunner发送过来的命令字串的,但是最后如何将它翻译成事件的代码我们还没有进行分析,因为在那之前我们还没有了解命令翻译类的相关知识。那么经过第3小节对命令翻译类的学习后,我们就可以继续往下分析Monk...

2015-12-08 08:40:29

阅读数 1016

评论数 0

原创 第6章3节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令翻译类

每个来自网络的字串命令都需要进行解析执行,只是有些是在解析的过程中直接执行了事,而有些是需要在解析后创建相应的事件类实例并添加到命令队列里面排队执行。负责这部分工作的就是命令翻译类。那么我们往下还是继续在MonkeySourceNetwork这个范畴中MonkeyCommand类是怎么一回事: ...

2015-12-08 08:39:34

阅读数 1049

评论数 0

原创 第6章2节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-获取命令字串

从上一节的描述可以知道,MonkeyRunner发送给Monkey的命令是以字符串的形式交互的,那么事件处理的第一步当然是先去获得MonkeyRunner发送过来的字串命令了。 在事件源MonkeySourceNetwork初始化的时候构造函数会创建一个ServerSocket来监听来自客户端的链...

2015-12-08 08:38:23

阅读数 1108

评论数 0

原创 第6章1节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览

在上一章中我们有简要的介绍了事件源是怎么一回事,但是并没有进行详细的描述。那么往下的这几个小节我们就需要把这方面的知识给补充完整。 这一节我们先主要围绕MonkeySourceNetwork这个事件源来学习事件源的框架结构。首先,要理解事件源,必须先搞清楚几个问题:事件从哪里来? Monkey的事...

2015-12-08 08:36:55

阅读数 1977

评论数 0

翻译 智能机增长速度放缓,库克却乐开了坏

自智能手机出现以来,人们从不吝啬往这上面抛掷真金白银,所以整个市场在近十年来都是呈指数级别的增长。但今天,根据全球著名的市场研究公司IDC的预测,临近尾声的2015将成为全球智能手机市场增长率首次低于10位数的一年...

2015-12-07 11:32:52

阅读数 1309

评论数 0

翻译 沃尔玛全球最便宜的10美元智能机评测报告

"反正就是最便宜的..."

2015-12-07 11:22:00

阅读数 2104

评论数 1

翻译 一分钟告诉你究竟DevOps是什么鬼?

为了能够更好的理解什么是DevOps,我们很有必要对当时还只有程序员(此前还没有派生出开发者,前台工程师,后台工程师之类)这个称号存在的历史进行一下回顾。如编程之道中所言:老一辈的程序员是神秘且深奥的。我们没法揣摩他们的想法,我们所能做的只是描述一下他们的表象。 清醒的像一只游过水面的狐狸 警惕的...

2015-12-07 10:56:23

阅读数 37458

评论数 9

翻译 Adobe 最终还是接受了Flash将寿终正寝的这个事实

随着HTML5的兴起,曾经风靡全球的Flash已经逐渐被人淡忘。但是想当年Flash还真的是大家可以做出动人的动画的唯一的选择,所以才吸引无数的开发人员使用Adobe的Flash专业版进行动画制作。今天Adobe通过将Flash专业版重新命名成Adobe Animate CC,算是正式的给Flas...

2015-12-03 10:35:19

阅读数 1961

评论数 0

翻译 彼得·蒂尔:新核能市场将成风投热土

如果我们真的想要取代污染严重的矿物燃料的话,那么我们毫无疑问是需要发展核能技术的。那么剩下的问题就很明朗了:我们要不就是纸上谈兵,对所谓的无碳环境意淫下就完事开始事后烟;要不就是切实行动,真刀真枪的去干一场以造福后代子孙...

2015-12-01 11:22:37

阅读数 1457

评论数 0

提示
确定要删除当前文章?
取消 删除