这次我们来讲一下,MonkeySourceNetwork.java.
这个类相对较大,里面有许多的内嵌类.(ps. 我不是写Java出身的,看到内嵌类就不符合我的审美习惯)
1.有一个MonkeyCommand的类,这是一个interface. *Command都是他的子类.
其中定义了一个很重要的方法:这个方法将string 类型的command转换为MonkeyEvent对象,并放入
commandQueue.
MonkeyCommandReturn translateCommand(List<String> command, CommandQueue queue);
好了,首先MonkeyCommandReturn又是一个类,是命令执行成功还是失败的一个类.
commandQueue是实际上是一个interface,然后它的实现是在CommandQueueImpl这个类中.
实现了如下的方法:
public void enqueueEvent(MonkeyEvent e) {
queuedEvents.offer(e);
}
将Event放入queueEvents队列中.而queueEvents是这样定义的:
private final Queue<MonkeyEvent> queuedEvents = new LinkedList<MonkeyEvent>();
无非就是一个LinkedList而已拉.
2.下面我在来说说MonkeySourceNetwork类中的方法:
private void translateCommand(String commandLine)
和上面的方法同名.实际上这个translateCommand是上面的封装.我们来RTFS:
List<String> parts = commandLineSplit(commandLine);
if (parts.size() > 0) {
MonkeyCommand command = COMMAND_MAP.get(parts.get(0));
if (command != null) {
MonkeyCommandReturn ret = command.translateCommand(parts,commandQueue);
COMMAND_MAP这是个什么东西呢?
private static final Map<String, MonkeyCommand> COMMAND_MAP = new HashMap<String, MonkeyCommand>();
看了没,是一个Map.以Command string作为Key, MonkeyCommand作为Value.这样的话,就建立了,
输入的命令和Command的关系。
static {
// Add in all the commands we support
COMMAND_MAP.put("flip", new FlipCommand());
COMMAND_MAP.put("touch", new TouchCommand());
COMMAND_MAP.put("trackball", new TrackballCommand());
COMMAND_MAP.put("key", new KeyCommand());
COMMAND_MAP.put("sleep", new SleepCommand());
COMMAND_MAP.put("wake", new WakeCommand());
COMMAND_MAP.put("tap", new TapCommand());
COMMAND_MAP.put("press", new PressCommand());
COMMAND_MAP.put("type", new TypeCommand());
COMMAND_MAP.put("listvar", new MonkeySourceNetworkVars.ListVarCommand());
COMMAND_MAP.put("getvar", new MonkeySourceNetworkVars.GetVarCommand());
}
但也不是所有的命令都放入COMMAND_MAP中.quit 和 done 就是例外,原因也很简单,没必要放进Map.
再来分析下这条语句:MonkeyCommandReturn ret = command.translateCommand(parts,commandQueue);
首先,command已经是MonkeyCommand的sub class了.so 调用translateCommand将会表现出不同的行为.
例如,command假设为PressCommand.则translateCommand的表现为:
queue.enqueueEvent(new MonkeyKeyEvent(....))
每一个MonkeyEvent又都代表了一些对AP GUI错作.所以,也就是把操作放入了Queue.
okay.就这么多了.才不多这次就说这么多吧.我再附上我的手绘图,希望有帮助.
分享到:
相关推荐
基于 Android Monkey 二次开发,实现高速点击的 Android Monkey 自动化工具
Android monkey 源码
关于android monkey的相关知识,以及脚本使用方式, 参考本人博客:http://yaoxiaowen.com/2017/02/android%E4%B9%8Bmonkey%E6%B5%8B%E8%AF%95/
有关android的monkey的源码,便于你的研究
android系统monkey源码。android系统monkey源码。
高速uiautomator控件解析算法的Android Monkey, 每秒10-15个Action Event。实现快速DFS算法的Android Monkey , 每秒 5个Action Event。
android 测试工具monkey的原码,解压即可。
Monkey是android sdk自带的一款命令行工具,适用于任何android模拟器或者真机。它通过向手机发送一系列的随机事件,来测试手机app的稳定性。
Android monkey test 的安装介绍及使用方法
Android monkey 命令.xlsx
android中利用monkey做压力测试时,各个参数的比例、设置等脚本
monkey test android 自动化测试monkey test android 自动化测试monkey test android 自动化测试monkey test android 自动化测试
Android_Monkey_测试执行策略及标准
android monkey test offical document
Android Monkey可以实现多设备(模拟器)同时运行monkey压力测试
android monkey user manual
google为方便android开发人员测试软件的测试工具,猴子测试,里面详细讲解改软件的使用方法。祝大家开发出一个好的程序
android_monkeytest
基于monkey原理,利用反射、蓝牙传送数据实现的事件注入。一个鼠标端采集注入事件(Motionevent、keyevent),一个显示器端实现事件注入,通过一个手机控制另外一个手机。