Android Monkey 源代码阅读

本文介绍了AndroidMonkey工具的基本信息,包括其在源代码中的位置、jar包存放路径及启动脚本。详细阐述了Monkey的工作流程,从初始化参数到事件生成、触发的过程,并列举了多种事件类型及其处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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休眠一段时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值