¿Cómo usar ADB para enviar eventos táctiles al dispositivo usando el comando sendevent?
Estoy tratando de enviar eventos táctiles a un dispositivo usando AndroidDebugBridge, para que pueda realizar algunas pruebas básicas de automatización de la interfaz de usuario. He seguido la discusión en ENLACE . Puedo usar sendevent para simular touch en emuladores, pero no puedo hacer lo mismo en un dispositivo.
Al igual que en el enlace anterior, el emulador parece enviar 6 eventos para cada toque (xcoord, ycoord, 2 para prensa, 2 para lanzamiento) y fue fácil usar esta información para sendevents, pero un getevent para el la pantalla táctil de un dispositivo parece generar demasiados eventos.
¿Alguien ha logrado enviar touch desde ADB a un dispositivo? Podría por favor compartir la solución.
5 answers
Android viene con una herramienta de línea de comandos input
que puede simular varios eventos de entrada. Para simular tapping, es:
input tap x y
Puede usar el shell adb (>2.3.5) para ejecutar el comando de forma remota:
adb shell input tap x y
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-20 15:25:57
Para realizar una acción en particular (por ejemplo, para abrir el navegador web), primero debe averiguar dónde tocar. Para hacer eso, primero puede ejecutar:
adb shell getevent -l
Una vez que presione en el dispositivo, en la ubicación que desee, verá esta salida:
<...>
/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 le está diciendo que se presionó una tecla (botón abajo) en la posición 2f5, 69e en hexadecimal que es 757 y 1694 en decimal.
Si ahora desea generar el mismo evento, puede usar el comando input tap al mismo tiempo posición:
adb shell input tap 757 1694
Puede encontrar más información en:
Https://source.android.com/devices/input/touch-devices.html http://source.android.com/devices/input/getevent.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-10 17:20:08
2.3.5 no tenía input tap
, solo input keyevent
y input text
Puedes usar el monkeyrunner para ello: (esta es una copia de la respuesta en https://stackoverflow.com/a/18959385/1587329):
Es posible que desee utilizar monkeyrunner así:
$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)
También puede hacer un arrastre, iniciar actividades, etc. Echa un vistazo a la api de MonkeyDevice.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:31
Considere usar el uiautomator de Android , con adb shell uiautomator [...] o directamente usando el .jar que viene con el SDK.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-16 10:17:07
No es necesario utilizar
Adb shell getevent-l
Comando, solo tiene que habilitar en las opciones de desarrollador en el dispositivo [Mostrar datos táctiles] para obtener X e Y.
Puede encontrar más información en mi artículo aquí: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-21 13:22:42