通过adb将触摸事件发送到设备

Sun*_*air 38 android adb

我正在尝试使用adb shell命令将触摸事件发送到设备,以便我可以为UI测试执行一些基本的自动化.我已经在之前的一些主题中讨论了这个问题.

我确认了获取事件和使用sendevent,每次触摸发送6个事件(xcoord,ycoord,2新闻,2发布)并且很容易使用这些信息sendevent,但getevent触摸屏设备的命令似乎也产生了很多很多事件.

有人设法将触摸事件发送adb到设备吗?你能分享一下解决方案吗?

我正在努力在手机上录制触摸事件.之后,我希望将相同的事件作为UI测试的一部分发送回设备.

请帮忙

Ped*_*ito 48

Android附带了一个input可以模拟杂项输入事件的命令行工具.
要模拟a tap,请使用:

input tap x y
Run Code Online (Sandbox Code Playgroud)

运行input命令远程使用adb shell:

adb shell input tap x y
Run Code Online (Sandbox Code Playgroud)

其他选择是:

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>
Run Code Online (Sandbox Code Playgroud)


use*_*154 30

要发送触摸事件,您需要执行以下操作:

1设置坐标:

adb shell sendevent /dev/input/event2 3 0 x
adb shell sendevent /dev/input/event2 3 1 y
Run Code Online (Sandbox Code Playgroud)

2发送触摸事件(必须有0 0 0对):

adb shell sendevent /dev/input/event2 1 330 1
adb shell sendevent /dev/input/event2 0 0 0
Run Code Online (Sandbox Code Playgroud)

3发送释放手指事件(必须有0 0 0对):

adb shell sendevent /dev/input/event2 1 330 0
adb shell sendevent /dev/input/event2 0 0 0
Run Code Online (Sandbox Code Playgroud)

请注意:

1您可以录制事件:

adb shell getevent
Run Code Online (Sandbox Code Playgroud)

2如果使用getevent,则所有事件值均为十六进制.

最好的问候,Yahor

  • 你的意思是,getevent以十六进制记录,而sendevent只接受十进制??? (2认同)

Max*_*nni 20

我设法记录了一个会话并用bash和adb重播它.

这就是我所做的,我希望它可以帮助某人.

记录一系列事件

  1. 设置pc以在文件中记录数据(/tmp/android-touch-events.log)

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在手机上做一些事情
  3. 用PC停止adb命令 ctrl-c

重播录制的事件

此命令将执行十六进制转换 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
Run Code Online (Sandbox Code Playgroud)


ser*_*inc 5

你可能想要像这样使用monkeyrunner:

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

你也可以做一个拖动,启动活动等.看看MonkeyDevice的api .