要使用Monkeyrunner,首先得准备好环境。
1.安装android SDK,配置好开发环境(Eclipse);
2.安装好Python(因Monkeyrunner是由Jython写的,直接调用android API来整的)。
环境搭好后,就可开始我们的使用之旅了
详细步骤如下:
1. 用Elipse打开android的模拟器,在CMD中用andorid命令打开模拟器或直接通过打开AVD Manager.exe开启一个模拟器
CMD命令,如:D:\android\tools>emulator -avd AVD2.2
Comments: 定位到android SDK的路径下的tools目录,运行上面这个命令。“AVD2.2”是被启动的模拟器名称
Note:运行monkeyrunner之前必须先运行相应的模拟器,不然monkeyrunner无法连接设备。
2.打开另一个CMD窗口,定位到monkeyrunner.exe所在路径(如我的路径是D:\android\tools)
输入命令"monkeyrunner",回车,将进入shell
接下来就可以导入monkeyrunner所要使用的模块了。当然是我们的"From...import..."
直接在shell命令中输入: from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 回车
OK,这步完成之后,我们就可以开始和模拟器“勾兑”了,哈哈,命令如下:
device = MonkeyRunner.waitForConnection()
没有报错的话,就代表和模拟器勾兑成功,我们可以接着“骚扰”它了。接下来,我们可以在此模拟器上装上被测试的APK包.
输入如下命令,并传入你的apk所在相对路径即可。我这安装的是著名的ApiDemos。成功了会返回true。
如果没有返回true,一般都是语法错误或者你传入的相对路径有问题,仔细检查下就没问题了。
device.installPackage("./Apidemos.apk")
Command:‘./ApiDemos.apk’表示在当前路径下,若是其他路径则如../路径目录/ApiDemos.apk)
接下来,我们就可以启动其中的任意activity了,只要传入package和activity名称即可。命令如下:
device.startActivity(component = "com.example.android.apis/com.example.android.apis.ApiDemos")
此时模拟器会自动打开ApiDemos这个应用程序的主页。
当然我们还可以给模拟器发送更多的操作,如模拟任何按键时间和滚动等,并且可以截图。命令格式和上述命令类似,在此就不再累述了。
另外,我们也可以不这样麻烦得一行行地输入命令,可以将从“from...import...”开始的所有后面的语句都写到一个python文件里面,例如monkeyrunnerTest.py
如py文件中的命令包括如下:
#————————————————————————————————————————————————
# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()
# Installs the Android package. Notice that this method returns a boolean, so you can test to see if the installation worked.
device.installPackage('./ApiDemos.apk')
# Runs the component
device.startActivity(component='com.example.android.apis/.ApiDemos')
# Presses the Menu button
device.press('KEYCODE_MENU','DOWN_AND_UP')
# Takes a screenshot
result = device.takeSnapshot()
# Writes the screenshot to a file
result.writeToFile('./shot1.png','png')
#————————————————————————————————————————————————————
然后我们再从命令行直接通过monkeyrunner运行它即可。比如,我们还是用上面的例子,语法如下:
D:\android\tools>monkeyrunner monkeyrunnerTest.py
接下来monkeyrunner会自动调用monkeyrunnerTest.py,并执行其中的语句,相当方便。
============================================================================
Monkeyrunner自身是带有帮助手册的,里面有所有API的说明,可以输出为HTML或者TXT格式的文档。
可是,这个帮助文档在哪呢?根据Android developer网站上的说明,我们可以用这个命令来生成API reference手册:
monkeyrunner<format>help.py<outfile> |
其中,format可以是HTML和TXT,outfile为输出文档的路径。
OK,说做咱就做,比如我们运行 monkeyrunner html help.py "mrapi.html" ,回车。
咦,报错了?Can't open sepcified script. 不对啊,这照着做也出错,这不坑die吗?
是的,这次google似乎是估计留了个陷阱在这。在monkeyrunner的路径里面确实找不到help.py这个文件,不报错那就是SDK有错了。
那该肿么办呢?我们可以看看monkeyrunner的源码,在Monkeyrunner.java中,可以看到静态的help方法可以生成所有帮助的字符串,那么可不可以利用这个方法来生成API帮助文档呢?实践证明是可以的。代码很简单,如下:
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
content = MonkeyRunner.help("text");
f = open('help.txt', 'w');
f.write(content);
f.close();
如果要生成html的话,替换第二行的参数为html,并将第三行的help.txt改为html即可。
完毕后,我们可以保存为help.py文件(为方便起见我们最好将该文件放到monkeyrunner.bat同一目录).
然后我们直接运行 monkeyrunner help.py,等待2,3秒钟,OK,运行完毕,help.txt是不是已经在你眼前了?呵呵,好好看看吧,所有API函数都在里面了。
其实大家如果不想生成文档,想看在线的,也是可以的,android developer上都有。
问题解决方案:
一个问题是,有童鞋使用MonkeyImage的sameAs方法老是出错,我自己试了试,确实要出错,错误提示是:不能将IChimpImage对象转换为IMonkeyImage对象时要出错。再次查看源码,MonkeyImage.java中的sameAs函数有这么一个注释:// TODO: check if thisconversion works
IChimpImage ther = (IChimpImage) otherObject.__tojava__(IChimpImage.class);
看来明显google的工程师还没有验证过这个转换的正确性,并且很杯具地失败了。哎,真是天意弄人。幸好,有万能的python在,我们还是有办法滴。建议大家使用python的PIL库进行图片比较,一样可以达到非常好的效果并且要稳定很多。
另一个常见的问题是模拟按键时的press方法,比如我们要模拟按一下向下键,本来可以这样写:device.press('KEYCODE_DPAD_DOWN', 'DOWN_AND_UP')但大家会发现要报错,并且是很奇怪的错: TypeError: press: The 3rd argument is required. 咋会这样呢?再看看MonkeyDevice的源码,原来DOWN_AND_UP是MonkeyDevice的静态字符串成员,应该是可以直接调用的。我们再换成 device.press('KEYCODE_DPAD_DOWN', MonkeyDevice.DOWN_AND_UP)
这下终于OK了,呵呵。
还有一个常见的问题是,能否将monkeyrunner集成到eclipse中?答案是看你使用什么平台。
如果是linux环境下,那没问题,完全可以,具体操作可以看看国外有个高手写的博客,需越狱:http://dtmilano.blogspot.com/2011/03/using-android-monkeyrunner-from-eclipse.html
但如果你是用的window环境,那情况似乎就没有那么乐观了。因为google没有提供在windows环境下用于eclipse的monkeyrunner解释器,所以...基本上是8可能配置的,除非哪个高手将这个解释器做出来。
Monkeyrunner是基于python的脚本自动化工具,虽然有一定的局限性,不过使用起来确实入门门槛较低,大家看看帮助,自己利用ApiDemos的example做例子多练练,应该还是可以很快入门的。