記錄一系列事件

記錄一系列事件

我有一台運行 CM13 的 HTC 10 我正在嘗試透過 ADB 和發送事件向其發送觸控事件 發送後:

adb shell
sendevent /dev/input/event6 3 57 0
sendevent /dev/input/event6 3 53 300
sendevent /dev/input/event6 3 54 400
sendevent /dev/input/event6 3 48 5
sendevent /dev/input/event6 3 58 50
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0

我在手機上點擊了一下,在顯示觸控開啟的情況下,我可以看到觸控已經開始,但觸控在手機上仍然處於活動狀態。

根據我的閱讀這裡這裡以及其他地方,看來我應該要做的是:

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0

或者甚至只是

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 0 0

但是,這兩個命令都不會導致手機上的觸控結束。

我嘗試將所有這些內容放在手機本身的 shell 腳本中,並從 adb shell 運行該腳本,但這導致了相同的結果。觸摸的開始,而不是結束。

答案1

雖然沒有你的環境,但我已經調查了這個問題。正如您所做的那樣,可以找到各種文章,這些文章似乎總是對某些人有效,但對其他人無效。我的結論是,手機硬體/Android 版本/SDK 版本的組合之間存在差異,因此沒有一種解決方案適用於所有設定。

您必須找出適合您的方法。請記住,軟體的重大更新總是可以讓您回到起點。

我發現的最簡單的方法是使用命令input tap x y

adb shell input tap x y

並非所有input版本都有該tap參數,但在不帶參數的情況下啟動它會列印所有可用的參數和語法:

shell@m0:/ $ input
input
usage: input ...
       input text <string>
       input keyevent <key code number or name>
       input [touchscreen|touchpad|touchnavigation] tap <x> <y>
       input [touchscreen|touchpad|touchnavigation] swipe <x1> <y1> <x2> <y2> [duration(ms)]
       input trackball press
       input trackball roll <dx> <dy>

另一種方法是使用獲取事件記錄觸控螢幕時發生的事件。摘自這裡:

記錄一系列事件

  1. 設定電腦將資料記錄在檔案中 ( /tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  2. 在電話上做一些事情
  3. 停止電腦上的 adb 指令ctrl-c

重播記錄的事件

該指令將進行十六進位轉換awk

$ awk '{printf "%s %d %d %d\n", substr($1, 1, length($1) -1), strtonum("0x"$2), strtonum("0x"$3), strtonum("0x"$4)}' /tmp/android-touch-events.log | xargs -l adb shell sendevent

請注意 Getevent 以十六進位顯示其參數但只接受十進位輸入的問題,上面的腳本試圖修正這一點。

猴子跑者是您可以使用的另一個工具,如圖所示這裡:

您可能會想使用猴子跑者像這樣:

$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)

您也可以進行拖曳、啟動活動等。 猴子設備

參考:

相關內容