我们查看官方文档,表里只给出了8种事件(可以看我上篇的翻译文档)。但我们运行Monkey后,却发现有11种事件!最坑爹的是,在每种事件的百分比后面,他还不给注明是什么事件!

原来不同的Android SDK中的Event percentages种类数和顺序是不一样的!

我们可以查看android-4.2.2_r1.2中的MonkeySourceRandom.java中定义的这些值:

  1. public static final int FACTOR_TOUCH        = 0;
  2. public static final int FACTOR_MOTION       = 1;
  3. public static final int FACTOR_PINCHZOOM    = 2;
  4. public static final int FACTOR_TRACKBALL    = 3;
  5. public static final int FACTOR_ROTATION     = 4;
  6. public static final int FACTOR_NAV          = 5;
  7. public static final int FACTOR_MAJORNAV     = 6;
  8. public static final int FACTOR_SYSOPS       = 7;
  9. public static final int FACTOR_APPSWITCH    = 8;
  10. public static final int FACTOR_FLIP         = 9;
  11. public static final int FACTOR_ANYTHING     = 10;
  12. public static final int FACTORZ_COUNT       = 11;    // should be last+1
  13. private static final int GESTURE_TAP = 0;
  14. private static final int GESTURE_DRAG = 1;
  15. private static final int GESTURE_PINCH_OR_ZOOM = 2;

然后再来看Monkey.java源码中的processOptions()方法

  1. private boolean processOptions() {
  2. // quick (throwaway) check for unadorned command
  3. if (mArgs.length < 1) {
  4. showUsage();
  5. return false;
  6. }
  7. try {
  8. String opt;
  9. while ((opt = nextOption()) != null) {
  10. if (opt.equals("-s")) {
  11. mSeed = nextOptionLong("Seed");
  12. } else if (opt.equals("-p")) {
  13. mValidPackages.add(nextOptionData());
  14. } else if (opt.equals("-c")) {
  15. mMainCategories.add(nextOptionData());
  16. } else if (opt.equals("-v")) {
  17. mVerbose += 1;
  18. } else if (opt.equals("--ignore-crashes")) {
  19. mIgnoreCrashes = true;
  20. } else if (opt.equals("--ignore-timeouts")) {
  21. mIgnoreTimeouts = true;
  22. } else if (opt.equals("--ignore-security-exceptions")) {
  23. mIgnoreSecurityExceptions = true;
  24. } else if (opt.equals("--monitor-native-crashes")) {
  25. mMonitorNativeCrashes = true;
  26. } else if (opt.equals("--ignore-native-crashes")) {
  27. mIgnoreNativeCrashes = true;
  28. } else if (opt.equals("--kill-process-after-error")) {
  29. mKillProcessAfterError = true;
  30. } else if (opt.equals("--hprof")) {
  31. mGenerateHprof = true;
  32. } else if (opt.equals("--pct-touch")) {
  33. int i = MonkeySourceRandom.FACTOR_TOUCH;
  34. mFactors[i] = -nextOptionLong("touch events percentage");
  35. } else if (opt.equals("--pct-motion")) {
  36. int i = MonkeySourceRandom.FACTOR_MOTION;
  37. mFactors[i] = -nextOptionLong("motion events percentage");
  38. } else if (opt.equals("--pct-trackball")) {
  39. int i = MonkeySourceRandom.FACTOR_TRACKBALL;
  40. mFactors[i] = -nextOptionLong("trackball events percentage");
  41. } else if (opt.equals("--pct-rotation")) {
  42. int i = MonkeySourceRandom.FACTOR_ROTATION;
  43. mFactors[i] = -nextOptionLong("screen rotation events percentage");
  44. } else if (opt.equals("--pct-syskeys")) {
  45. int i = MonkeySourceRandom.FACTOR_SYSOPS;
  46. mFactors[i] = -nextOptionLong("system (key) operations percentage");
  47. } else if (opt.equals("--pct-nav")) {
  48. int i = MonkeySourceRandom.FACTOR_NAV;
  49. mFactors[i] = -nextOptionLong("nav events percentage");
  50. } else if (opt.equals("--pct-majornav")) {
  51. int i = MonkeySourceRandom.FACTOR_MAJORNAV;
  52. mFactors[i] = -nextOptionLong("major nav events percentage");
  53. } else if (opt.equals("--pct-appswitch")) {
  54. int i = MonkeySourceRandom.FACTOR_APPSWITCH;
  55. mFactors[i] = -nextOptionLong("app switch events percentage");
  56. } else if (opt.equals("--pct-flip")) {
  57. int i = MonkeySourceRandom.FACTOR_FLIP;
  58. mFactors[i] = -nextOptionLong("keyboard flip percentage");
  59. } else if (opt.equals("--pct-anyevent")) {
  60. int i = MonkeySourceRandom.FACTOR_ANYTHING;
  61. mFactors[i] = -nextOptionLong("any events percentage");
  62. } else if (opt.equals("--pct-pinchzoom")) {
  63. int i = MonkeySourceRandom.FACTOR_PINCHZOOM;
  64. mFactors[i] = -nextOptionLong("pinch zoom events percentage");
  65. } else if (opt.equals("--pkg-blacklist-file")) {
  66. mPkgBlacklistFile = nextOptionData();
  67. } else if (opt.equals("--pkg-whitelist-file")) {
  68. mPkgWhitelistFile = nextOptionData();
  69. } else if (opt.equals("--throttle")) {
  70. mThrottle = nextOptionLong("delay (in milliseconds) to wait between events");
  71. } else if (opt.equals("--randomize-throttle")) {
  72. mRandomizeThrottle = true;
  73. } else if (opt.equals("--wait-dbg")) {
  74. // do nothing - it's caught at the very start of run()
  75. } else if (opt.equals("--dbg-no-events")) {
  76. mSendNoEvents = true;
  77. } else if (opt.equals("--port")) {
  78. mServerPort = (int) nextOptionLong("Server port to listen on for commands");
  79. } else if (opt.equals("--setup")) {
  80. mSetupFileName = nextOptionData();
  81. } else if (opt.equals("-f")) {
  82. mScriptFileNames.add(nextOptionData());
  83. } else if (opt.equals("--profile-wait")) {
  84. mProfileWaitTime = nextOptionLong("Profile delay" +
  85. " (in milliseconds) to wait between user action");
  86. } else if (opt.equals("--device-sleep-time")) {
  87. mDeviceSleepTime = nextOptionLong("Device sleep time" +
  88. "(in milliseconds)");
  89. } else if (opt.equals("--randomize-script")) {
  90. mRandomizeScript = true;
  91. } else if (opt.equals("--script-log")) {
  92. mScriptLog = true;
  93. } else if (opt.equals("--bugreport")) {
  94. mRequestBugreport = true;
  95. } else if (opt.equals("--periodic-bugreport")){
  96. mGetPeriodicBugreport = true;
  97. mBugreportFrequency = nextOptionLong("Number of iterations");
  98. } else if (opt.equals("-h")) {
  99. showUsage();
  100. return false;
  101. } else {
  102. System.err.println("** Error: Unknown option: " + opt);
  103. showUsage();
  104. return false;
  105. }
  106. }
  107. } catch (RuntimeException ex) {
  108. System.err.println("** Error: " + ex.toString());
  109. showUsage();
  110. return false;
  111. }
  112. // If a server port hasn't been specified, we need to specify
  113. // a count
  114. if (mServerPort == -1) {
  115. String countStr = nextArg();
  116. if (countStr == null) {
  117. System.err.println("** Error: Count not specified");
  118. showUsage();
  119. return false;
  120. }
  121. try {
  122. mCount = Integer.parseInt(countStr);
  123. } catch (NumberFormatException e) {
  124. System.err.println("** Error: Count is not a number");
  125. showUsage();
  126. return false;
  127. }
  128. }
  129. return true;
  130. }

所以,Monkey运行结果中对应的就应该是:

0:--pct-touch//touch
events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)

1:--pct-motion//motion
events percentage手势事件百分比(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯

2:--pct-pinchzoom//pinch
zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作

3:--pct-trackball//trackball
events percentage轨迹球事件百分比(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现在智能手机上已经没有了,就是类似手柄的方向键一样)

4:--pct-rotation//screen
rotation events percentage屏幕旋转百分比,横屏竖屏

5:--pct-nav//nav
events percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有

6:--pct-majornav//major
nav events percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的中间键、回退键、菜单键)

7:--pct-syskeys//system(key)
operations percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, Start Call, End Call,音量控制)

8:--pct-appswitch//app
switch events percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法

9:--pct-flip//keyboard
flip percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回

10:--pct-anyevent//anyevents
percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。

参考:

http://blog.csdn.net/jlminghui/article/details/42261307

http://blog.csdn.net/jlminghui/article/details/42268187
源码:

https://code.google.com/p/android-source-browsing/source/browse/cmds/monkey/src/com/android/commands/monkey/Monkey.java?repo=platform--development&name=android-4.2.2_r1.2

最新文章

  1. .net session_end
  2. C#--副线程调用主线程的控件
  3. Visual Studio 常用插件
  4. Eclipse配置Flex开发环境(转)
  5. poj 3181 Dollar Dayz
  6. A3992学习记录
  7. 周末“干活”之 Mesos Meetup
  8. ftk学习记录(IME文章)
  9. SQL查找 删除重复数据只保留一条
  10. 浅析 SpringMVC 原理和配置.
  11. 2.SpringMVC注解开发
  12. UI自动化(五)dom
  13. Nginx 目录结构
  14. js 字符串转对象
  15. ipv6地址累加函数
  16. layui框架遇到时间控件在搜索之后再次点击出现异常的问题
  17. numpy的文件存储,读取 .npy .npz 文件
  18. USB开发库STSW-STM32121文件分析
  19. python实现斐波那契数列笔记
  20. 如何在前端项目中引用bootstrap less?

热门文章

  1. zabbix-3.4-服务监控
  2. 获得session中的用户信息
  3. JS每点击一次添加多少条数据
  4. 避免使用 JS 特性 with(obj){}
  5. 前台使用load一个集合后台接受的方法
  6. mongostat查看mongodb运行状态使用命令介绍
  7. XGBoost算法原理小结
  8. C#事件与接口编程实例
  9. java Html&amp;JavaScript面试题:判断第二个日期比第一个日期大
  10. select * 比select column快很多奇怪案例分析