将触摸事件从ADB发送到设备

我尝试使用ADB shell命令将触发事件发送到设备,以便我可以为UItesting做一些基本的自动化。 我在之前的一些主题中讨论了这个问题。

我确认要得到事件和使用sendevents,发送每个触摸6个事件(xcoord,ycoord,2为新闻,2为释放),很容易使用这个信息sendevents,但触摸屏getevent一个设备似乎产生了太多的事件。

有人设法从亚行发送触摸事件到设备? 你可以请分享解决scheme。

我非常感谢你的帮助。

我正在logging手机上的触摸事件。 之后,我希望将相同的事件作为UItesting的一部分发送回设备。

请帮忙

Solutions Collecting From Web of "将触摸事件从ADB发送到设备"

Android自带一个input命令行工具,可以模拟各种input事件。 模拟敲击使用:

input tap xy 

您可以使用adb shell来远程运行命令:

 adb shell input tap xy 

其他选项是:

 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> 

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

1设置坐标:

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

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

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

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

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

请注意:

1您可以logging事件:

 adb shell getevent 

2如果你使用getevent所有的事件值都是hex的。

最好的问候,Yahor

我设法logging一个会议,并重播只有bash和adb。

这是我做的,我希望它可以帮助别人。

logging一系列事件

  1. 设置电脑来logging数据( /tmp/android-touch-events.log

     $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log 
  2. 在手机上做一些东西
  3. ctrl-c停止pc上的adb命令

重放录制的事件

这个命令将在awk执行hex转换

 $ 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 

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

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

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