如何使用ADB使用sendevent命令向设备发送触摸事件?

问题描述 投票:0回答:6

我正在尝试使用 AndroidDebugBridge 将触摸事件发送到设备,以便我可以为 UI 测试做一些基本的自动化。我关注了LINK中的讨论。我可以使用 sendevent 模拟模拟器上的触摸,但无法在设备上执行相同的操作。

就像上面的链接一样,模拟器似乎为每次触摸发送 6 个事件(xcoord,ycoord,2 个按下,2 个释放),并且很容易使用此信息来发送事件,但是设备触摸屏的 getevent 似乎产生太多事件。

有人设法将触摸从 ADB 发送到设备吗?能否请您分享解决方案。

android automation adb touchscreen
6个回答
172
投票

Android 附带了一个

input
命令行工具,可以模拟各种输入事件。要模拟点击,它是:

input tap x y

您可以使用adb shell(> 2.3.5)远程运行命令:

adb shell input tap x y

92
投票

为了执行特定操作(例如打开网络浏览器),您需要首先弄清楚要点击的位置。 为此,您可以首先运行:

adb shell getevent -l

一旦按下设备,在您想要的位置,您将看到以下输出:

<...>
/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 告诉您在位置 2f5、69e(十六进制)处按下了一个键(按钮按下),即十进制的 757 和 1694。

如果您现在想要生成相同的事件,可以在相同位置使用输入点击命令:

adb shell input tap 757 1694

更多信息请访问:

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


13
投票

2.3.5 没有

input tap
,只有
input keyevent
input text
您可以使用monkeyrunner:(这是答案的副本https://stackoverflow.com/a/18959385/1587329):

您可能想像这样使用 monkeyrunner

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

您还可以进行拖动、启动活动等。 查看 MonkeyDevice 的 api。


12
投票

建立在托马斯的答案之上,这是我发现的以整数形式查找位置分接头位置的最佳方法:

adb shell getevent -l | grep ABS_MT_POSITION --line-buffered | awk '{a = substr($0,54,8); sub(/^0+/, "", a); b = sprintf("0x%s",a); printf("%d\n",strtonum(b))}'

使用

adb shell getevent -l
获取事件列表,使用 grep 获取
ABS_MT_POSITION
(以十六进制形式获取触摸事件行),最后使用 awk 获取相关的十六进制值,将它们去掉零并将十六进制转换为整数。仅当您按下设备时,才会在终端中连续打印 x 和 y 坐标。

然后您可以使用此 adb shell 命令发送命令:

adb shell input tap x y

9
投票

你不需要使用

adb shell getevent -l

命令,只需在设备的开发者选项中启用【显示触摸数据】即可获取X和Y。

更多信息可以在我的文章中找到:https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/


4
投票

考虑使用 Android 的 uiautomator,配合 adb shell uiautomator [...] 或直接使用 SDK 附带的 .jar。

© www.soinside.com 2019 - 2024. All rights reserved.