Eine Reihe von Ereignissen aufzeichnen

Eine Reihe von Ereignissen aufzeichnen

Ich habe ein HTC 10, auf dem CM13 läuft. Ich versuche, ihm Touch-Ereignisse mittels ADB und „Send Event“ zu senden. Nach dem Senden dieses Ereignisses:

adb shell
sendevent /dev/input/event6 3 57 0
sendevent /dev/input/event6 3 53 300
sendevent /dev/input/event6 3 54 400
sendevent /dev/input/event6 3 48 5
sendevent /dev/input/event6 3 58 50
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0

Ich erhalte ein Klicken auf dem Telefon. Bei aktivierter „Showtouches“ kann ich sehen, dass die Berührung begonnen hat, aber dass die Berührung auf dem Telefon immer noch aktiv ist.

Basierend auf meiner LektüreHierUndHiersowie an anderen Orten, scheint alles, was ich tun muss, zu sein:

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 2 0
sendevent /dev/input/event6 0 0 0

oder vielleicht sogar nur

sendevent /dev/input/event6 3 57 -1
sendevent /dev/input/event6 0 0 0

Keiner dieser Befehle führt allerdings dazu, dass die Berührung auf dem Telefon beendet wird.

Ich habe versucht, all dies in ein Shell-Skript auf dem Telefon selbst zu packen und das Skript von der ADB-Shell aus auszuführen, aber das Ergebnis war dasselbe. Der Anfang der Berührung und nicht das Ende.

Antwort1

Obwohl ich nicht über Ihre Umgebung verfüge, habe ich mich mit dem Problem befasst. Es gibt, wie Sie, verschiedene Artikel, die bei manchen Leuten immer zu funktionieren scheinen, bei anderen aber nicht. Ich bin zu dem Schluss gekommen, dass es Unterschiede zwischen den Kombinationen von Telefonhardware/Android-Version/SDK-Version gibt, sodass es keine einheitliche Lösung für alle Konfigurationen gibt.

Sie müssen herausfinden, was für Sie funktioniert. Bedenken Sie dabei, dass ein umfangreiches Software-Update Sie immer wieder zum Ausgangspunkt zurückwerfen kann.

Die einfachste Methode, die ich gefunden habe, ist die Verwendung des input tap x yBefehls:

adb shell input tap x y

Nicht alle inputVersionen verfügen über diesen tapParameter, wenn Sie ihn jedoch ohne Argumente starten, werden alle verfügbaren Parameter und die Syntax gedruckt:

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>

Eine andere Möglichkeit ist die VerwendungGeteventum die Ereignisse aufzuzeichnen, die passieren, wenn Sie den Bildschirm berühren. Wie ausHier:

Eine Reihe von Ereignissen aufzeichnen

  1. Richten Sie den PC so ein, dass Daten in einer Datei aufgezeichnet werden ( /tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  2. ein paar Sachen am Telefon erledigen
  3. stoppen Sie den ADB-Befehl auf dem PC mitctrl-c

Aufgezeichnete Ereignisse erneut abspielen

Dieser Befehl führt die Hex-Konvertierung durch inawk

$ 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

Beachten Sie den Haken, dass Getevent seine Parameter im Hex-Format anzeigt, aber nur Eingaben im Dezimalformat akzeptiert, was das obige Skript zu korrigieren versucht.

Affenläuferist ein weiteres Werkzeug, das Sie verwenden können, wie gezeigtHier:

Vielleicht möchten Sie verwendenAffenläuferso was:

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

Sie können auch ziehen, Aktivitäten starten usw. Schauen Sie sich die API für MonkeyDevice.

Verweise:

verwandte Informationen