(樓主原創敲字也8容易,如蒙轉載,煩請註明出處和作者,謝謝!)
時間過得真快,一晃離第一篇Monkeyrunner的日誌已經快三個月了。雖然在這段時間裡沒怎麼研究Monkeyrunner,但看到眾多致力於Monkeyrunner的小盆友們對此話題如此沉醉,忍不住衝動再次提筆,想把自己知道一些東西跟大家再做一些分享,畢竟網上對此工具的資料少之又少,任何可用的一點資料可能對於有些童鞋來說都是一點點希望之光,呵呵。當然,我也希望自己的拙作能夠起到拋磚引玉的效果,大家共同進步!
好了,閑話少說,今天我們討論點什麼呢?其實想想自己對Monkeyrunner的瞭解也不太深入,實在找不到太多東西給大家分享,那就還是從上一篇文章中一些回複提到的問題說起吧。很多童鞋都問我,網上有沒有什麼比較好的Monkeyrunner的教程?我的回答是:沒有。至少我找了很久都沒有找到比較好的。信不信由你,反正我是信了幸好,毛主席早就告訴我們:自己動手,豐衣足食,網上沒有,自己研究唄。其實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做例子多練練,應該還是可以很快入門的。
今天就先寫到這裡,大家在實際使用過程中有問題可以留言一起討論討論,共同進步!
作者:qingchunjun