Android Monkey 源代码阅读
2016-09-16 09:46
381 查看
Android Monkey 源代码阅读
0. Monkey基本信息
目前该工具位于源代码的位置:development/cmds/monkey。
生成的jar包位于:
out/traget/product/generic/system/framework/monkey.jar。
在设备中,启动monkey的脚本位于
/system/bin/monkey:
# Script to start "monkey" on the device, which has a very rudimentary # shell. # base=/system export CLASSPATH=$base/framework/monkey.jar trap "" HUP exec app_process $base/bin com.android.commands.monkey.Monkey $*
1. Monkey开始启动
1. main函数只是设置了进程的名称,主要过程在run函数中执行。
2. 获取参数,初始化参数和随机数。然后它会获取系统的一些服务,见1.3。获取需要启动的main activity,见1.4。创建一个MonkeySourceRoandom对象mEventSource,由他管理随机事件的生成,这里首先让它生成了一个启动main activity的事件放入了队列。monkey还支持通过脚本、网络获取事件,这里只说默认的随机情况。下面,它启动Network Monitor。接着,启动Monkey的循环过程,见1.5。等待测试结束后,则输出测试报告。
3. 获取一些系统服务,有ActivityManager、WindowManager、PackageManager。给ActivityManager设置了一个ActivityController对象,该对象提供了Activity启动、crash获取、应用无响应等功能。最后,还注册了一个网络状态的监听器。
4. 从PackageManager中获取符合条件的main activity,然后添加入
mMainApps中。
5. 这一步就会循环的生成测试事件见1.6、触发事件1.10。
6. 从队列中获取第一个事件返回。如果队列为空,则生成一个放入队列,见1.7。
7. 这里先生成一个随机数,根据随机数范围,决定具体生成哪一个事件。这里有点击、拖动、缩放(前三个,见1.8)、轨迹球(已经不常用了,可以忽略)、旋转、权限(见1.9)和键盘事件。
8. 这里会首先利用DisplayManager获得屏幕的实际大小,然后随机的生成生成点坐标。Touch只需要一点就够了,而Drag则需要生成一系列的点,这里利用了randomWalk函数来随机的移动来生成下一个点坐标,然后将这一系列点坐标封装成事件放入队列。两指缩放同样使用了和Drag类似的方法,只不过是将一个点变为两个点。
9. 从目标package中的权限列表中获取一个,然后生成一个MonkeyPersissionEvent。
10. MonkeyEvent是一个抽象类,具体的实现在其子类中。MotionEvent通过InputManager注入事件。旋转MonkeyRotationEvent通过WindowManager进行旋转。MonkeyPermissionEvent利用PackageManager授予、撤销应用的一些权限。MonkeyKeyEvent同样是使用InputManager进行注入。
11. 这里还有一些其它事件。MonkeyActivityEvent的事件是由ActivityManager启动的。MonkeyCommandEvent则启动一个进程,执行命令即可。MonkeyFlipEvent,唤起键盘的操作,这里是向
/dev/input/event0写入了一组字节。MonkeyGetAppFrameRateEvent和MonkeyGetFrameRateEvent,获取应用帧频,通过命令行执行来实现。MonkeyInstrumentationEvent, 利用ActivityManager启动Instrumentation组件。MonkeyNoopEvent,什么也不做,呵呵。MonkeyPowerEvent,从log信息中获取电量信息。MonkeyThrottleEvent和MonkeyWaitEvent,Thread.sleep休眠一段时间。
相关文章推荐
- Github android客户端源代码分析之一:环境搭建 分类: H1_ANDROID 2013-11-12 22:47 2829人阅读 评论(0) 收藏
- android体系结构以及源代码阅读环境搭建
- 用eclipse阅读编辑android和kernel,uboot的源代码
- 阅读安卓在线(Android)系统源代码
- android插件化-apkplugdemo源代码阅读指南-10
- 在Android Studio中阅读Android系统源代码
- 【Android 系统开发】使用 Source InSight 阅读 Android 源代码
- Android 源代码在线阅读
- 【安卓系统源码学习之在线阅读】Android程序员必备本领--查看系统源代码
- struts源代码阅读(Commons-Pool包)
- Windows源代码阅读之 句柄算法
- Source Insight: Linux源代码阅读的利器
- 关于源代码的阅读体会
- Linux下源代码阅读工具lxr安装使用说明
- OS161 源代码阅读-2
- struts源代码阅读(Commons-Beanutils包)
- struts源代码阅读(struts 初始化)
- Monkey黑白棋 所使用的经典算法(源代码)
- struts源代码阅读(Commons-Beanutils包)
- Source Insight:Linux源代码阅读的利器