¿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, de modo que pueda hacer una automatización básica para las pruebas de UI. He seguido la discusión en LINK . Puedo usar sendevent para simular touch on emulators, pero no puedo hacer lo mismo en un dispositivo.

Al igual que en el enlace de arriba, el emulador parece enviar 6 eventos por cada toque (xcoord, ycoord, 2 para la prensa, 2 para el lanzamiento) y fue fácil usar esta información para los eventos sencillos, pero un evento getevent para la pantalla táctil de un dispositivo parece generar demasiados eventos.

¿Alguien ha logrado enviar un toque de ADB a un dispositivo? ¿Podría compartir la solución?

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

     input tap xy 

    Puede usar el shell adb (> 2.3.5) para ejecutar el comando de forma remota:

     adb shell input tap xy 

    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á este resultado:

     < ...> /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 te está diciendo que se presionó una tecla (botón hacia abajo) en la posición 2f5, 69e en hex, que es 757 y 1694 en decimal.

    Si ahora desea generar el mismo evento, puede usar el comando de entrada de tap en la misma posición:

     adb shell input tap 757 1694 

    Más información se puede encontrar en:

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

    2.3.5 no tiene input tap , simplemente input keyevent y input text . Puede usar monkeyrunner para esto: (esta es una copia de la respuesta en https://stackoverflow.com/a/18959385/1587329 ):

    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 .

    Considere usar uiautomator de Android, con uiautomator shell adb o directamente […] utilizando el .jar que viene con el SDK.

    No necesitas usar

    adv shell getevent -l

    comando, solo tiene que habilitar en Opciones de desarrollador en el dispositivo [Mostrar datos táctiles] para obtener X e Y.

    Se puede encontrar algo más de información en mi artículo aquí: https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/