2010-12-08 167 views
26

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

我确认了有关获取事件和使用sendevents,发送每个触摸的6个事件(xcoord,ycoord,2 for press,2 for release),并且很容易将这些信息用于sendevents,但是一个getevent for设备的触摸屏似乎产生太多事件。

有人设法将触摸事件从ADB发送到设备?您可以请分享解决方案。

我真的很感谢你的帮助。

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

请帮

+0

结帐十六进制转换http://marian.schedenig.name/2014/07/03/remote-control-your-android-phone-through- adb/ – 2015-12-31 14:29:59

回答

27

要你需要做派触摸事件:

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您可以记录事件:

adb shell getevent 

2,如果你使用getevent所有事件的值是十六进制。

最好的问候, Yahor

+1

你的意思是,十六进制中的getevent记录,sendevent只接受十进制? – MarcoS 2011-08-04 09:25:38

+0

是的,getevent以十六进制输出,但只能使用十进制。没有错误打印,只是没有做任何事情:) – gilm 2013-09-30 10:47:14

+0

这里的解决方案是什么?我必须手动将所有的十六进制转换为十进制吗? – TeaLeave 2014-04-30 17:55:00

4

您可能需要使用monkeyrunner这样的:

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

你也可以做一拖,开始活动比较等 看一看的API MonkeyDevice

37

Android自带一个输入命令行工具,可以模拟各种输入事件。为了模拟攻用途:

input tap x y 

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

adb shell input tap x y 

其他选项是:

[email protected]:/ $ 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> 
14

我设法记录会话和回放它只有bash和adb。

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

记录一系列事件

  1. 设置电脑在文件中记录的数据(/tmp/android-touch-events.log

    $ adb shell getevent | grep --line-buffered ^/ | tee /tmp/android-touch-events.log 
    
  2. 做一些东西在手机
  3. 上停止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 
相关问题