enviar eventos táctiles a un dispositivo a través de adb

Estoy tratando de enviar eventos táctiles a un dispositivo usando el comando adb shell , para poder hacer una automatización básica para las pruebas de UI. He seguido la discusión en algunos hilos anteriores con respecto a esto.

sendevent sobre la obtención de los eventos y el uso de sendevent , para enviar 6 eventos por cada toque (xcoord, ycoord, 2 para la prensa, 2 para el lanzamiento) y fue fácil usar esta información con sendevent , pero el comando getevent para el dispositivo con pantalla táctil parece generar demasiados eventos.

¿Alguien ha logrado enviar eventos táctiles desde adb a un dispositivo? ¿Podría compartir la solución?

Estoy trabajando en la grabación de eventos táctiles en el teléfono. Después de eso, deseo enviar el mismo evento al dispositivo como parte de las pruebas de UI.

Por favor ayuda

Android viene con una herramienta de línea de comandos de entrada que puede simular eventos de entrada misceláneos.
Para simular un tap , use:

 input tap xy 

Ejecute el comando de input forma remota usando adb shell :

 adb shell input tap xy 

Otras opciones son:

 shell@m0:/ $ input input usage: input ... input text  input keyevent  input [touchscreen|touchpad|touchnavigation] tap   input [touchscreen|touchpad|touchnavigation] swipe     [duration(ms)] input trackball press input trackball roll   

Para enviar el evento táctil que necesita hacer:

1 Establecer coordenadas:

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

2 Enviar evento táctil (debe tener 0 0 0 par):

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

3 Enviar evento de dedo de liberación (debe tener 0 0 0 par):

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

Tenga en cuenta:

1 Puede grabar eventos:

 adb shell getevent 

2 si usa getevent, todos los valores de evento están en hexadecimal.

Saludos cordiales, Yahor

Logré grabar una sesión y reproducirla solo con bash y adb.

Esto es lo que hice, espero que ayude a alguien.

Graba una serie de eventos

  1. Configure la PC para registrar datos en un archivo ( /tmp/android-touch-events.log )

     $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log 
  2. hacer algunas cosas en el teléfono
  3. detener el comando adb en la pc con ctrl-c

Reproduce los eventos grabados

Este comando hará la conversión hexadecimal en 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 

Es posible que desee utilizar monkeyrunner de esta manera:

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

También puede arrastrar, iniciar actividades, etc. Eche un vistazo a la API de MonkeyDevice .