일련의 이벤트를 기록하세요.

일련의 이벤트를 기록하세요.

CM13을 실행하는 HTC 10이 있습니다. ADB를 사용하여 터치 이벤트를 보내려고 합니다. 이것을 보낸 후 이벤트 보내기:

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

showtouches를 켠 상태에서 전화기를 클릭하면 터치가 시작되었지만 전화기에서는 터치가 여전히 활성화되어 있는 것을 볼 수 있습니다.

내가 읽은 내용을 바탕으로여기그리고여기다른 곳과 마찬가지로 내가 해야 할 일은 다음과 같습니다.

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

아니면 그냥

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

그러나 이러한 명령 중 어느 것도 전화기에서 터치가 종료되지 않습니다.

나는 이 모든 것을 전화기 자체의 쉘 스크립트에 넣고 adb 쉘에서 스크립트를 실행하려고 시도했지만 결과는 동일했습니다. 끝이 아닌 터치의 시작.

답변1

귀하의 환경은 없지만 문제를 조사했습니다. 당신이 그랬듯이, 항상 어떤 사람들에게는 효과가 있는 것처럼 보이지만 다른 사람들에게는 그렇지 않은 다양한 기사가 있습니다. 내 결론은 휴대폰 하드웨어/안드로이드 버전/SDK 버전의 조합 간에 차이가 있어 모든 설정에 대해 하나의 솔루션이 없다는 것입니다.

당신은 무엇이 당신에게 효과가 있는지 알아내야 할 것입니다. 소프트웨어의 주요 업데이트로 인해 항상 시작 지점으로 돌아갈 수 있다는 점을 명심하십시오.

내가 찾은 가장 간단한 방법은 다음 input tap x y명령을 사용하는 것입니다.

adb shell input tap x y

모든 input버전에 tap매개변수가 있는 것은 아니지만 인수 없이 시작하면 사용 가능한 모든 매개변수와 구문이 인쇄됩니다.

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>

또 다른 방법은Getevent화면을 터치할 때 발생하는 이벤트를 기록합니다. 에서 가져온대로여기:

일련의 이벤트를 기록하세요.

  1. 파일에 데이터를 기록하도록 PC 설정 ( /tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
  2. 전화로 이것저것 좀 해라
  3. PC에서 adb 명령을 중지하십시오.ctrl-c

기록된 이벤트를 재생합니다.

이 명령은 16진수 변환을 수행합니다.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

Getevent는 매개변수를 16진수로 표시하지만 10진수로만 입력을 허용하므로 위 스크립트에서는 이를 수정하려고 시도합니다.

원숭이 러너설명된 것처럼 사용할 수 있는 또 다른 도구입니다.여기:

당신은 사용하고 싶을 수도 있습니다원숭이 러너이와 같이:

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

드래그, 활동 시작 등을 수행할 수도 있습니다. API를 살펴보세요. 원숭이장치.

참고자료:

관련 정보