需求:
不管是做自動化測試的,還是傳媒技術的,自動化操作Android App是一種操作需求;
自動化的操作可以節省很多的人力資源投入;
實現:
Android UI界面的自動化,通常有兩個方法:
1. 使用得較多的是input命令,input可以直接輸入“所有按鍵、屏幕點擊、拖動和直接輸入文本內容”;
2. 較為復雜的操作使用getevent 和 sendevent來完成,理論上可以操作一切觸屏的輸入;
問題:
通常,input使用起來會特別簡單方便,可以把坐標記錄好,寫寫腳本就完事了;
但是涉及到復雜的操作,如 長按等 input就不能完成了;
思路:
於是還是回到了 getevent和sendevent方法,sendevent命令本身就是只簡單調用一下ioctl來向 /dev/input/eventX 發送控制;
但是由於 Shell腳本在執行過程中,效率本身就是個問題,使用Shell腳本回放錄制的內容,會出現意想不到的問題,如:
一個操作被分割成兩個操作來執行, 這本身就不是我們期望的;
解決:
所以,我寫在寫回放腳本時,就把 錄制到的信息,制作成一個C語言文件,直接以二進制形式來執行,這樣子就不會出現操作被分割的現象了;
源代碼:https://github.com/scue/android_tap_record
相關鏈接:
1. sendevent.c: https://github.com/android/platform_system_core/blob/master/toolbox/sendevent.c
2. 編譯工具請使用NDK: http://developer.android.com/tools/sdk/ndk/