Отправить событие касания от АБР к устройству

Я пытаюсь отправить события касания к устройству с использованием команды оболочки ADB, чтобы я мог выполнить некоторую базовую автоматизацию для тестов пользовательского интерфейса. Я последовал за обсуждением в некоторых предыдущих потоках относительно этого.

Я подтвердил получение событий и использование sendevents, чтобы отправить 6 событий для каждого касания (xcoord, ycoord, 2 для печати, 2 для выпуска), и было легко использовать эту информацию для отправки сообщений, но getevent для сенсорный экран для устройства, похоже, генерирует слишком много событий.

Кто-нибудь смог отправить событие Touch из ADB на устройство? Не могли бы вы поделиться этим решением.

Я очень ценю вашу помощь.

Я работаю над записью событий касания на телефоне. После этого я хочу отправить одно и то же событие обратно на устройство как часть тестирования пользовательского интерфейса.

Пожалуйста, помогите

Ответ 1

Android поставляется с инструментом командной строки ввода, который может имитировать разные входные события. Для имитации использования постукивания используйте:

input tap x y

Вы можете использовать оболочку adb для удаленного запуска команды:

adb shell input tap x y

Другие варианты:

[email protected]:/ $ 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>

Ответ 2

Чтобы отправить событие касания, которое вам нужно сделать:

1 Задайте координаты:

adb shell sendevent /dev/input/event2 3 0 x
adb shell sendevent /dev/input/event2 3 1 y

2 Отправить событие касания (должно иметь 0 0 0 пар):

adb shell sendevent /dev/input/event2 1 330 1
adb shell sendevent /dev/input/event2 0 0 0

3 Отправляйте событие отпечатка пальца (должно иметь 0 0 0 пар):

adb shell sendevent /dev/input/event2 1 330 0
adb shell sendevent /dev/input/event2 0 0 0

Обратите внимание:

1 Вы можете записывать события:

adb shell getevent

2, если вы используете getevent, все значения события находятся в шестнадцатеричном формате.

С уважением, Егор

Ответ 3

Мне удалось записать сеанс и воспроизвести его только с bash и adb.

Это то, что я сделал, надеюсь, это поможет кому-то.

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

  • Настройте компьютер для записи данных в файл (/tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  • сделайте что-нибудь на телефоне
  • остановить команду 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

Ответ 4

Возможно, вы захотите использовать monkeyrunner следующим образом:

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

Вы также можете выполнить перетаскивание, начать работу и т.д. Посмотрите на api для MonkeyDevice.