Android Monkey(一)

來源:互聯網
上載者:User

這兩天在讀Android Monkey的原始碼.代碼不多,放出分享.
我現說一下,Monkey是幹什麼的:簡單的說就是,類比使用者的touch screen和keyboard的輸入.其實這個功能就已經很恐怖了.  Google自己說的下面:

// Only bind this to local host.  This means that you can only// talk to the monkey locally, or though adb port forwarding.

就是覬覦這個強大的力量.Monkey是用JAVA寫成的,但是我們確可以這樣運行:

$adb shell monkey ......

這是為什麼呢?是因為在/system/bin目錄下有一個monkey的shell指令碼.內容如下:

# Script to start "monkey" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/monkey.jarexec app_process $base/bin com.android.commands.monkey.Monkey $*

exec 會運行起/system/framework/monkey.jar這隻Java程式.後面我們還會用到這個指令碼.

先給出Monkey的架構圖:

又是我的手繪圖.哈哈.實際上,並不複雜.

Monkey.java 裡面有main()函數.而main()->Run().Run()裡面作了下面的操作:1.processOptions()初始化參數(通過傳入入參來初始化參數).還有一些的操作函數如:nextOption() nextOptionLong()。。2.做介面的檢查,也就是申請這些介面資源.3.關鍵的一步:  if(mServerPort!=1)   { try{           mEventSource = new MonkeySourceNetWork(mServerPort);    ...省略  開始ServerSocket.監聽使用者輸入的command.4.mNetworkMonitor.Start();開始監控網路狀態5.關鍵的一步:  runMonkeyCycles(),代碼如下:  while()  {       MonkeyEvent ev = mEventSource.getNextEvent();     ev.inject(....);   ...省略   開始Event loop,把每個CommandQueue中的訊息都執行.6.mNetworkMonitor.Stop()

這裡我們看到使用了SocketServer,所以理論上來說,可以在PC端發送command給device,但是必須透過USB的串連.這點我在上面已經說的很清楚了.(PC端,Android不可能幫你實現,我們只要在PC端使用Socket向device發送命令就可以了).
好了,我們接著往下分析:

MonkeyEvent的實現是典型的OO思想.MonkeyEvent.java僅僅是一個abstract class.最重要的方法都由子類去實現.(把Event放入當前的Activity去運行)public abstract int injectEvent(IWindowManager iwm, IActivityManager iam, int verbose);monkey*Event.java都是MonkeyEvent.java的子類.

這次先寫這麼多了...

Update!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.