要使用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做例子多練練,應該還是可以很快入門的。