2010-12-08 24 views
26

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

Confirmé acerca de cómo obtener los eventos y el uso de sendevents, para enviar 6 eventos por cada contacto (xcoord, ycoord, 2 para la prensa, 2 para el lanzamiento) y fue fácil usar esta información para sendevents, pero un getevent para la pantalla táctil de un dispositivo parece generar demasiados eventos.

¿Alguien ha logrado enviar el evento táctil desde ADB a un dispositivo? ¿Podría compartir la solución?

Realmente aprecio su ayuda.

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 la prueba de UI.

Por favor, ayudar a

+0

Pedido http://marian.schedenig.name/2014/07/03/remote-control-your-android-phone-through- adb/ –

Respuesta

27

Para enviar eventos táctiles que tiene que hacer:

1 Set coordina:

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

2 Enviar eventos táctiles (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 utiliza getevent todos los valores de los eventos están en formato hexadecimal.

Saludos, Yahor

+1

¿Se refiere a registros getevent en hexadecimal y sendevent solo acepta decimal? – MarcoS

+0

Sí, getevent imprime en hexadecimal, pero funciona solo con decimal. No hay errores impresos, simplemente no hace nada :) – gilm

+0

¿Cuál es la solución aquí? ¿Tengo que convertir todo el hexadecimal en decimal manualmente? – TeaLeave

4

Es posible que desee utilizar monkeyrunner como esto:

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

También puede hacer un lastre, etc. Actividades al comenzar echar un vistazo a la API para MonkeyDevice.

37

Android viene con una herramienta de línea de comandos de entrada que puede simular eventos de entrada misceláneos. Para simular el uso tapping:

input tap x y 

se puede utilizar el adb shell para ejecutar el comando a distancia:

adb shell input tap x y 

Otras opciones son:

[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> 
+1

Solo tengo 'text' y' keyevent' –

+0

Algunos android vienen con binarios lisiados. –

14

que logró grabar una sesión y reproducir con solo bash y adb.

Esto lo que hice, espero que ayude a alguien.

grabar una serie de eventos

  1. configurar el PC para grabar 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

Reproducir la eventos registrados

Este comando va a hacer 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 
+0

"awk: rescate en la línea de origen 1", este error viene. ¿Tienes alguna idea? – nikhil84

+0

comando de reproducción no funciona en OSX. xargs: opción ilegal - l; awk: llamando a la función indefinida strtonum – prageeth

+1

@geeth parece que [alguien lo ha encontrado, también] (http://stackoverflow.com/questions/8199934/strtonum-in-os-x-not-found). Lo siento por estar en GNU/Linux. – MaxChinni

Cuestiones relacionadas