MonkeyRunner可以用来做自动化测试,在Android中做动态分析的时候也可以使用它来做行为触发。

不过感觉使用MonkeyRunner来做行为触发还是很局限的。就比如我想实现外界向模拟器拨打电话,或者是发送短信就很难。

如果有好的方法,希望您能告诉我。(已解决,可以移步到脚本实现模拟拨打电话,发送短息等)

在Android的管网上介绍了可以使用MonkeyRunner来启动APK ,但是前提是必须是你要知道要启动的APK的包名和Activity名。

想要启动任何未知的Activity怎么办呢。就比如说,你要在模拟器上安装一个你不知到的APK ,怎么来启动它。

这里用到了Apktool.

1.使用Apktool来反编译我们的目标文件

将APK反编译之后,可以在得到的文件夹下找到AndroidManifest.xml文件

这个时候使用Python来提取出包名和类名,保存在两个文件夹里面。

为什么要怎么做,因为启动MonkeyRunner 的命令是MonkeyRunner -v ALL xxxx.py

我们要想办法传入未知的包名和Activity怎么做,只有通过使用文件的读写操作来达到互动。

2.获取任意程序的包名和Activity的名字。

#
# @author  : grace
# @date    : 2013-5-26
# filename : parseManifest.py
# run      : python parseManifest.pyimport os
import sys
from xml.dom import minidomif __name__ == "__main__":opts, args = getopt.getopt(sys.argv[1:], "d:h", "directory = help")for op, value in opts:if op in ("-d","--directory"):_directory = valuexmldoc =minidom.parse(_directory + '/AndroidManifest.xml')manifest = xmldoc.getElementsByTagName('manifest')[0]package = manifest.getAttribute('package')getActivity = xmldoc.getElementsByTagName('activity')[0]activity = getActivity.getAttribute('android:name')output = open(_directory + 'package.txt','w')
output.write(package)
output.close()output = open(_directory + 'activity.txt','w')
output.write(activity)
output.close()

上面这个程序的代码是用来解析AndroidManifest.xml的,通过这个程序来获得包名和Activity 的名字,将他们分别存储在package.txt  和activity.txt 文件中

这里我们只保存了一个 ,因为只下需要一个Activity就可以启动我们的APK。

3.接下来就是通过MonkeyRunner 来做行为触发

#
# @author   : grace
# @date     : 2013-5-25
# filename  : behaviorTrigger.py
# run       : monkeyrunner -v ALL behaviorTrigger.py
#from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImagepackage = ''activity = ''fp = open("package.txt")
package = fp.readline()
fp.close()fa = open("activity.txt")
activity=fa.readline()
fa.close()device =MonkeyRunner.waitForConnection()MonkeyRunner.sleep(1)runComponent = package + '/' + activityaction = 'android.intent.action.MAIN'device.startActivity(action = action, component = runComponent)MonkeyRunner.sleep(2)res=device.takeSnapshot()res.writeToFile(  '/shot1.png','png')device.touch(160,194,MonkeyDevice.DOWN_AND_UP)res=device.takeSnapshot()res.writeToFile( '/shot2.png','png')device.touch(160,374,MonkeyDevice.DOWN_AND_UP)device.touch(160,194,MonkeyDevice.DOWN_AND_UP)res=device.takeSnapshot()res.writeToFile('/shot3.png','png')device.touch(60,200,MonkeyDevice.DOWN_AND_UP)MonkeyRunner.sleep(1)device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP)

注意文件存放的位置应该是你用apktool 反编译之后的文件夹下面

apktool d XXXX.APK  文件夹名称

MonkeyRunner的使用二相关推荐

  1. 【转】monkeyrunner学习总结二:连接、安装、启动

    一.获取packageName与startActivity 前置条件:已成功安装配置SL4A并连接PC调试(参见:monkeyrunner学习总结一:环境搭建:http://www.amsoft.cn ...

  2. 转 Android自动测试之monkeyrunner工具(二)

    monkeyrunner工具  前言: 最近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey.Monkeyru ...

  3. monkeyrunner使用

    monkey和monkeyrunner都是android sdk提供的测试命令,但monkeyrunner和money没有什么直接的关系,monkey是在设备直接运行adb shell命令生成随机事件 ...

  4. python屏幕录制与回放_monkeyrunner之录制与回放(七)

    monkeyrunner为我们提供了录制 回放的功能. 录制与回放使用原因:实际项目,需求变更频繁,且测试任务多,我们没有足够时间去写测试脚本,这是就可以进行录制脚本,然后通过回放,跑完需要的流程. ...

  5. python runner功能_Appium+python自动化(二十三)- 真假美猴王Monkeyrunner与Monkey傻傻的分不清楚(超详解)...

    简介 看<西游记>第五十七回,说是"六耳猕猴"化作孙悟空的摸样,伤了唐僧,后又和孙悟空大打出手-- 这位假孙悟空,实力不用多说了吧,和真孙悟空一般无二,大战孙悟空,闹到 ...

  6. Appium+python自动化(二十三)- 真假美猴王Monkeyrunner与Monkey傻傻的分不清楚(超详解)...

    简介 看<西游记>第五十七回,说是"六耳猕猴"化作孙悟空的摸样,伤了唐僧,后又和孙悟空大打出手-- 这位假孙悟空,实力不用多说了吧,和真孙悟空一般无二,大战孙悟空,闹到 ...

  7. monkeyrunner之夜神模拟器的安装与使用(二)

    在上一篇文章-安卓开发环境搭建中,我们创建并启动了eclipse自带的安卓模拟器,该模拟器不仅启动慢,而且在使用过程中的反应速度也是出奇的差,经常出现卡机现象.为了解决这种现象,因此,我们又寻找到了更 ...

  8. Android自动化测试 - MonkeyRunner(二) 锤子便签测试脚本

    来源于:http://testerhome.com/topics/878 1 # encoding=utf-8 2 3 4 #导入python中自带的time模块和sys模块,脚本中都要用到它们. 5 ...

  9. MonkeyRunner——如何在实体机上启动一个程序

    闲来无事,研究了下MonkeyRunner调试实体机.之前JDK,Python,SDK,MonkeyRunner环境都已配置完毕,这里就不一一详述了. 一)启动MonkeyRunner并连接设备: 打 ...

最新文章

  1. day3-python学习笔记(三)字典、元组
  2. unity vscode没有智能提示_GAMES101课程环境搭建(Win10+VSCode)
  3. gdal java api_Java使用GDAL库
  4. 惠普第八代游戏家族产品重磅首发,搭载英特尔第十二代酷睿处理器
  5. 心语收集14:人生没有如果,但是有很多但是;人生不能后悔,但是可以拐弯。...
  6. Java运行时数据区域
  7. 组策略不让你登陆你怎么办
  8. noip模拟赛 czy的后宫
  9. 从零开始搭建ABP框架(Asp .Net Boilerplate)+Oracle(11 g)
  10. 「目标检测算法」连连看:从Faster R-CNN 、 R-FCN 到 FPN
  11. 清除此计算机中wps云盘,Win10专业版系统怎么把电脑上的WPS网盘彻底删掉?
  12. oracle触发器和包,Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)
  13. 解决win10家庭高级版切换到Administrator用户后无法切换回原账户问题过程记录
  14. rabbitmq消息发送与接收stomp通道测试
  15. 数据库-音乐网站-sql
  16. Vue解决跨域多个target问题(配置多个代理问题)
  17. 磁盘主分区转换为逻辑分区
  18. 芮瑶学编程05-画七彩虹
  19. 读我(Readme)
  20. 第一章 README

热门文章

  1. 腾讯二面:@Bean与@Component用在同一个类上,会怎么样?
  2. 我用分布式事务干掉了一摞简历
  3. 阿里某P5程序员求助:跟女票要结婚,她家要50万彩礼,女票爸爸说钱不够可以先欠着,这婚能结吗?欠条以后能赖吗?...
  4. 【分布式事务】面试官问我:MySQL中的XA事务崩溃了如何恢复??
  5. AQS基础——多图详解CLH锁的原理与实现
  6. 朋友问我学习高并发需不需要阅读源码,我是这样分析的!!
  7. Hadoop数据收集与入库系统Flume与Sqoop
  8. 24 个必须掌握的数据库面试问题!
  9. 基于机器学习的入侵检测系统
  10. 绝对干货:19个有用的基于云的Web开发工具