有时候为了特殊的测试需求,我们需要使用ADB发送模拟touch的操作,就可以用到下面的方法,
1. 使用input工具里的tap参数模拟touch的操作
adb shell input tap x y
十分简单,也不需要知道是哪个eventX;另外,input还有其他参数,功能很强大,help文档如下,
# input
Usage: input [<source>] <command> [<arg>...]
The sources are:
trackball
joystick
touchnavigation
mouse
keyboard
gamepad
touchpad
dpad
stylus
touchscreen
The commands and default sources are:
text <string> (Default: touchscreen)
keyevent [--longpress] <key code number or name> ... (Default: keyboard)
tap <x> <y> (Default: touchscreen)
swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
press (Default: trackball)
roll <dx> <dy> (Default: trackball)
从上面的帮助文档,我们看到input还可以模拟文字输入(text)和滑动(swipe),十分好用。
2. 使用getevent获得事件信息
输入“adb shell getevent”,我们可以看到一直有信息吐出来,类似下面的信息,但他们是不是touch的event呢?
如果我们没有触碰touch,一直有event出来,那么这些event确定不是touch的event;touch的event只有当触摸touch的时候才会出来,这样,我们就知道如何录得正确的event了。
比如,当我们触碰touch的时候,有event1出来,则说明touch是通过event1发出的;我们可以使用命令“getevent | grep event1”只记录touch的event。
/dev/input/event1: 0003 0001 00000293
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0003 0039 ffffffff
/dev/input/event1: 0001 014a 00000000
/dev/input/event1: 0003 0018 00000000
/dev/input/event1: 0000 0000 00000000
3. 其他模拟touch event的方法
还可以通过sendevent来模拟touchevent,不过比较繁琐,方法如下,
a. 设置x/y坐标
adb shell sendevent /dev/input/event1 3 0 x
adb shell sendevent /dev/input/event1 3 1 y
b. 发送touch 事件(必须使用0 0 0配对)
adb shell sendevent /dev/input/event1 1 330 1
adb shell sendevent /dev/input/event1 0 0 0
c. 释放touch事件(必须使用0 0 0配对)
adb shell sendevent /dev/input/event1 1 330 0
adb shell sendevent /dev/input/event1 0 0 0