2025-05-24

 

(樓主原創敲字也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環境下,那沒問題,完全可以,具體操作可以看看國外有個高手寫的博客,:https://dtmilano.blogspot.com/2011/03/using-android-monkeyrunner-from-eclipse.html 但如果你是用的window環境,那情況似乎就沒有那麼樂觀瞭。因為google沒有提供在windows環境下用於eclipse的monkeyrunner解釋器,所以…基本上是8可能配置的,除非哪個高手將這個解釋器做出來,呵呵。還是辛苦點,手寫吧,也有利於真正鍛煉大傢的編程能力。

 

Monkeyrunner是基於python的腳本自動化工具,雖然有一定的局限性,不過使用起來確實入門門檻較低,大傢看看幫助,自己利用ApiDemos的example做例子多練練,應該還是可以很快入門的。

 

今天就先寫到這裡,大傢在實際使用過程中有問題可以留言一起討論討論,共同進步!

 

作者:qingchunjun

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *