【Android測試】【隨筆】模擬長按電源鍵

轉載自胖喵博客 : http://www.cnblogs.com/by-dream/p/5195121.html

起因


  昨天羣裏看到有人問如何實現一個長按電源鍵的操作,這個問題經常遇到,而且對於新手來說也比較棘手,於是在嘗試成功後,決定說說這個事情。

  一般這樣的需求都出現在自動化操作的過程中。但是一般的ui自動化貌似對長按操作都支持的不是特別好,即使有也是針對手機屏幕中的區域來進行長按,我們都知道電源鍵是一個實體鍵,無法通過點擊ui來實現。說道這裏估計很多人都想到了KEYCODE(“KEYCODE” 在【Android測試】【第十二節】Uiautomator——API詳解 中的Uidevice的API列舉中有介紹),沒錯很多的自動化工具提供了通過KEYCODE來進行點擊,但是基本上沒有長按這一個操作,於是我們就需要藉助Android本身的sendevent來進行輸入事件的模擬。

 

 

事件注入


  Android中的事件注入方式一共有三種:在Monkey源碼淺談的文章中,我們已經介紹過一種事件注入的方法,不過那種方法谷歌的限制比較嚴格,基本對我們做自動化沒什麼幫助;第二種是通過內部API的方式,由字面意思可知,只有Android應用程序纔可以做到,並且這種方法只在本應用中生效,因此對我們來說也不是特別的理想;還有一種方法就是注入事件到設備/dev/input/eventX,本次我們介紹的sendevent方法,其實就是通過/dev/input/eventX來實現事件模擬的,學會了這個之後就可以做到舉一反三,之後所有的點觸操作的模擬都可以以此類推。

 

 

獲得事件


  我來說說我是怎麼做的。

  首先我在手機的shell下輸入了getevent命令,這樣就可以接收到手機上操作的所有event事件。

  

  這個時候我們按下我們手機電源鍵,來看看可以接收到哪些事件信息,按下電源鍵後:

  

  我們得到了以上四條信息。

  我們來以第一條爲例分析一下獲得是什麼? 

  /dev/input/event0:  代表 device

  0001                         代表一個type

  0074                         代表power鍵的code(爲16進制)

  00000001                 代表value 一般 1代表按下,0代表放開。

  根據查閱sendevent 需要的參數爲就是device、type、code、value。

  於是我們就可以通過下面四條命令即可完成按power鍵的操作,中間sleep的時間長度大於2秒,系統就認爲是長按:

sendevent /dev/input/event0 1 116 1(0074轉化爲十進制後爲116)
sendevent /dev/input/event0 0 0 0
sleep 3
sendevent /dev/input/event0 1 116 0
sendevent /dev/input/event0 0 0 0

 

 

sh腳本


  當知道了如何模擬長按電源鍵之後,那麼我們如何用在自動化中呢?這裏我打算介紹一下shell腳本

  衆所周知Android是基於linux內核的,而shell腳本可以運行在linux中,所以我們試試用sh腳本是否可以在Android中運行。

  1、完成腳本

    因爲Android本身內部沒有vi,因此我打算在Windows上寫好腳本然後導入進去,腳本內容爲:

複製代碼

#!/bin/sh

sendevent /dev/input/event0 1 116 1
sendevent /dev/input/event0 0 0 0
echo "down"
sleep 3
sendevent /dev/input/event0 1 116 0
sendevent /dev/input/event0 0 0 0
echo "up"

複製代碼

  2、導入手機

    這一步不用多說,將腳本名稱保存爲 "boy.sh",然後使用adb導入手機sd卡。

     

  3、加權限

    一般linux系統中,導入的文件可能沒有權限,因此我們需要加權限後再運行,於是我做了下面的操作:

    

    運行後提示我沒有權限,明明剛纔加了權限的,我們來查看一下文件:

    

    仔細一看果然沒有加權限成功,懷疑自己剛纔是不是打錯了,於是又試了一次,還是不行。  

    最終經過不斷的嘗試,發現原來是sd卡是無法加權限的,必須要把文件放到 /data/data/的目錄下纔可以:

    

    終於權限加成功了。

  4、運行

    權限加成功後,迫不及待的去運行:

    

    還是提示有問題,後來也是不斷嘗試才知道,原因是手機的啓動命令和linux還是有差別,使用下面的啓動方法即可:

    

    運行完成之後,觀察手機,出現了長按電源鍵後的效果:

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章