web-dev-qa-db-fra.com

envoyer des événements tactiles à un appareil via adb

J'essaie d'envoyer des événements tactiles à un appareil à l'aide de adb Shell commande, afin que je puisse faire une certaine automatisation de base pour les tests d'interface utilisateur. J'ai suivi la discussion dans certains fils précédents à ce sujet.

J'ai confirmé l'obtention des événements et l'utilisation de sendevent, pour envoyer 6 événements pour chaque contact (xcoord, ycoord, 2 pour la presse, 2 pour publication) et il était facile d'utiliser ces informations avec sendevent, mais la commande getevent pour le périphérique à écran tactile semble générer beaucoup trop d'événements.

Quelqu'un a-t-il réussi à envoyer un événement tactile de adb à un appareil? Pourriez-vous s'il vous plaît partager la solution.

Je travaille sur l'enregistrement des événements tactiles sur le téléphone. Après cela, je souhaite renvoyer le même événement à l'appareil dans le cadre des tests d'interface utilisateur.

Veuillez aider

36
Sunilcnair

Android est fourni avec un outil de ligne de commande input qui peut simuler divers événements d'entrée.
Pour simuler un tap, utilisez:

input tap x y

Exécutez la commande inputà distance en utilisant adb Shell:

adb Shell input tap x y

Les autres options sont:

Shell@m0:/ $ 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>
46
Pedro Lobito

Pour envoyer un événement tactile, vous devez:

1 Définissez les coordonnées:

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

2 Envoyer l'événement tactile (doit avoir une paire 0 0 0):

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

3 Envoyer l'événement de libération du doigt (doit avoir une paire 0 0 0):

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

Notez s'il vous plaît:

1 Vous pouvez enregistrer des événements:

adb Shell getevent

2 si vous utilisez getevent, toutes les valeurs d'événement sont en hexadécimal.

Cordialement, Yahor

29
user643154

J'ai réussi à enregistrer une session et à la rejouer avec uniquement bash et adb.

C'est ce que j'ai fait, j'espère que ça aide quelqu'un.

Enregistrer une série d'événements

  1. Configurer le PC pour enregistrer des données dans un fichier (/tmp/Android-touch-events.log)

    $ adb Shell getevent | grep --line-buffered ^/ | tee /tmp/Android-touch-events.log
    
  2. faire des trucs au téléphone
  3. arrêtez la commande adb sur le pc avec ctrl-c

Rejouer les événements enregistrés

Cette commande effectuera la conversion hexadécimale dans 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
20
MaxChinni

Vous voudrez peut-être utiliser monkeyrunner comme ceci:

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

Vous pouvez également faire un glisser, démarrer des activités, etc. Jetez un œil à l'API pour MonkeyDevice .

5
serv-inc