老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数

MonkeyRunnerStarter是MonkeyRunner启动时的入口类,因为它里面包含了main方法.它的整个启动过程主要做了以下几件事情:

  • 解析用户启动MonkeyRunner时从命令行传输进来的参数: 因为MonkeyRunner需要根据指定的参数才能做事情,比如输入的一个需要执行的脚本。如果确实不知道任何参数的话它就会进入MonkeyRunner的交互模式,其实就是Jythong的交互模式,让用户可以边写代码边执行

  • 启动AndroidDebugBridge: 其实就是启动ADB服务器,因为MonkeyRunner跟设备通信的一个很重要的方法之一就是通过向ADB服务器发送命令来请求目标设备的服务

  • 启动设备监控线程: 其实这个是在启动AndroidDebugBridge的时候一并启动的。设备监控线程主要做的事情就是取监控设备是否有接入进来或者移除出去,如果有新的设备连接进来,或者说设备变成ONLINE状态(一个设备有多个状态:ONLINE|OFFLINE|RECOVERY|UNAUTHORIZED),那么就需要取监控设备里面的每个可调试进程,这主要是用来给DDMS等调试工具使用的。它维护了一个最新的设备列表

  • 启动AndroidDebugBridge:

  • 启动Monkey:

  • 运行测试脚本:

本小节我们会先去看下MonkeyRunner在启动的时候是如何获得命令行参数并对其进行解析处理的。整个过程其实跟monkey在启动的时候的命令行参数分析类似。往下我们先看下牵涉到的关键类之间的关系:

图8-2-1  MonkeyRunnerStarter类图

从类图中我们看到MonkeyRunnerStarter持有了一个MonkeyRunnerOptions类型的成员变量options,这个实例保存的就是解析出来的命令行参数,同时该类会提供一个processOptions方法来专门解析命令行参数。

我们先进入到MonkeyRunnerStart这个类的main方法:

178   public static void main(String[] args) {

179     MonkeyRunnerOptions options =

MonkeyRunnerOptions.processOptions(args);

180

181     if (options == null) {

182       return;

183     }

184

185

186     replaceAllLogFormatters(MonkeyFormatter.DEFAULT_INSTANCE,

options.getLogLevel());

187

188     MonkeyRunnerStarter runner =

new MonkeyRunnerStarter(options);

189     int error = runner.run();

190

191

192     System.exit(error);

193   }

194 }

代码3-2-1 MonkeyRunnerStart - main

这里主要做了三件事情:

  • 179行去处理用户启动monkeyrunner的时候输入的命令行参数

  • 188行去初始化MonkeyRunnerStarter,里面主要是初始化了ChimpChat,ChimpChat又去开启AndroidDebugBridge进程和开启DeviceMonitor设备监控线程,我们往后小节会进行详细分析

  • 189行去把monkeyrunner运行起来,包括带脚本参数的情况和不待脚本参数直接提供jython命令行的情况

转载于:https://blog.51cto.com/10988776/1731776

老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数...相关推荐

  1. 老李推荐:第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数 2...

    我们这一节会先去分析下monkeyrunner是如何对参数进行处理的,我们跳转到MonkeyRunnerOptions这个类里面的processOptions这个方法: 93   public sta ...

  2. 老李推荐:第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 1...

    老李推荐:第14章4节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-端口转发 在初始化HierarchyViewer的实例过程中, ...

  3. 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...

    老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...

  4. 老李推荐:第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例 1...

    老李推荐:第3章3节<MonkeyRunner源码剖析>脚本编写示例: MonkeyImage API使用示例 在上一节的第一个"增加日记"的示例中,我们并没有看到日记 ...

  5. 老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 1...

    老李推荐: 第8章4节<MonkeyRunner源码剖析>MonkeyRunner启动运行过程-启动AndroidDebugBridge 上一节我们看到在启动AndroidDebugBri ...

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

    老李推荐:第6章1节<MonkeyRunner源码剖析>Monkey原理分析-事件源-事件源概览 在上一章中我们有简要的介绍了事件源是怎么一回事,但是并没有进行详细的描述.那么往下的这几个 ...

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

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

  8. 老李推荐: 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例 1...

    老李推荐: 第3章2节<MonkeyRunner源码剖析>脚本编写示例: MonkeyDevice API使用示例 上一节我们学习了如何通过MonkeyRunner这个类的静态方法wait ...

  9. 老李推荐:第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树 1...

    老李推荐:第14章8节<MonkeyRunner源码剖析> HierarchyViewer实现原理-获取控件列表并建立控件树 poptest是国内唯一一家培养测试开发工程师的培训机构,以学 ...

最新文章

  1. javascript专业八级测试答案整理
  2. 四种保留小数后两位输出方法
  3. python金融大数据分析视频_Python金融大数据分析 PDF 全书超清版
  4. thinkphp学习总结
  5. 【转】互联网架构的三板斧
  6. [SQL面试经验] 经典sql面试题及答案第1期
  7. leetcode第197场周赛 之 5211概率的最大路径
  8. 爬取男神or女神图片(爬虫案例二)
  9. uni-app 实现语音播放实现思路和代码
  10. VScode 安装中文插件,不生效的解决办法
  11. 渗透测试 面试笔试题
  12. 【Web前端】配色方案(全览)
  13. Win10激活失败的原因之一
  14. 华科计算机硕士毕业论文,华科硕士论文格式
  15. 上海亚商投顾:沪指逼近2900点 两市超4500股飘绿
  16. Shell系统学习之什么是Shell
  17. Hive统计函数总结
  18. SQL 获取当前日期前几周的第一天和本周的最后一天
  19. Linux alias 的用法
  20. 多组学分析及可视化R包

热门文章

  1. 【BZOJ1452】【JSOI2009】count
  2. xamarin.android pullToRefresharp.Android下拉刷新样式、侧滑删除功能
  3. 转:Web页面通过URL地址传递参数常见问题及检测方法
  4. 【分享】小工具大智慧之Sql执行工具
  5. JVM笔记7:类加载器
  6. http请求头中包含未编码中文时webapi self host崩溃
  7. 如何为XAF设置默认属性值?
  8. python闭包技巧_案例详析:Python闭包与nonlocal关键字
  9. mysql用来干嘛的_CPU占用又爆了?MySQL到底在干什么
  10. php有哪些debug方式,Console有哪些Debug方法