Запишите серию событий

Запишите серию событий

У меня HTC 10, работающий под управлением CM13. Я пытаюсь отправлять на него сенсорные события с помощью ADB и Send Event After отправки этого:

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

Однако ни одна из этих команд не приводит к завершению сеанса связи на телефоне.

Я пробовал поместить все это в скрипт оболочки на самом телефоне и запустить скрипт из оболочки adb, однако это привело к тому же результату. Начало касания, а не конец.

решение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>

Другой способ — использоватьGeteventдля записи событий, которые происходят при прикосновении к экрану. Как взято изздесь:

Запишите серию событий

  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)

Вы также можете выполнять перетаскивание, запускать действия и т. д. Ознакомьтесь с API для MonkeyDevice.

Использованная литература:

Связанный контент