Как использовать ADB для отправки сенсорных событий на устройство с помощью команды sendevent?

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

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

Кто-нибудь смог послать прикосновение от АБР к устройству? Не могли бы вы поделиться этим решением.

Solutions Collecting From Web of "Как использовать ADB для отправки сенсорных событий на устройство с помощью команды sendevent?"

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

 input tap xy 

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

 adb shell input tap xy 

Чтобы выполнить какое-либо действие (например, чтобы открыть веб-браузер), вам нужно сначала выяснить, куда нажать. Для этого вы можете сначала запустить:

 adb shell getevent -l 

После того, как вы нажмете на устройство, в том месте, которое вы хотите, вы увидите этот вывод:

 <...> /dev/input/event3: EV_KEY BTN_TOUCH DOWN /dev/input/event3: EV_ABS ABS_MT_POSITION_X 000002f5 /dev/input/event3: EV_ABS ABS_MT_POSITION_Y 0000069e 

Adb сообщает вам, что нажата клавиша (кнопка вниз) в позиции 2f5, 69e в шестнадцатеричном формате, которая равна 757 и 1694 в десятичной системе.

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

 adb shell input tap 757 1694 

Больше информации можно найти по адресу:

https://source.android.com/devices/input/touch-devices.html http://source.android.com/devices/input/getevent.html

2.3.5 не было input tap , только input keyevent и input text Вы можете использовать для него обезьянника: (это копия ответа на https://stackoverflow.com/a/18959385/1587329 ):

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

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

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

Подумайте о том, как использовать uiautomator от Android с помощью оболочки adia uiautomator […] или напрямую с помощью .jar, который поставляется вместе с SDK.

Вам не нужно использовать

Adb shell getevent -l

Команды, вам просто нужно включить в Параметры разработчика на устройстве [Показать данные касания], чтобы получить X и Y.

Более подробную информацию можно найти в моей статье здесь: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/