adb shell input以及event可以模拟用户点击。
可以用来写自动化测试脚本。
关于adb shell 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)
注意text不可以输入中文。
adb shell input tap x y可以用来点击屏幕
adb shell input keyevent 26 可以用来点击物理键
但是真正需要按住,也就是press 物理键的时候,以上的内容就无法handle了。
这个时候就需要event来帮忙。
Android 自带了 getevent 和 sendevent,分别用于获取设备报送的事件和模拟产生事件,前者用于辅助设备驱动的验证,后者用于模拟事件进行上层应用的验证。
adb shell getevent -h
Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]
-t: show time stamps
-n: don't print newlines
-s: print switch states for given bits
-S: print all switch states
-v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64)
-d: show HID descriptor, if available
-p: show possible events (errs, dev, name, pos. events)
-i: show all device info and possible events
-l: label event types and names in plain text
-q: quiet (clear verbosity mask)
-c: print given number of events then exit
-r: print rate events are received
举例说明:
现在想要模拟按住音量-键
先 adb shell getevent,手动点击音量-
屏幕上显示:
/dev/input/event1: 0001 0072 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 0072 00000000
/dev/input/event1: 0000 0000 00000000
前两行是按下,后两行是弹起。
现在运行一下
adb shell sendevent /dev/input/event2 1 $((0x72)) 1
adb shell sendevent /dev/input/event2 0 0 0
发现是不是按住音量- 已经生效了转存失败重新上传取消转存失败重新上传取消
再运行一下
adb shell sendevent /dev/input/event2 1 $((0x72)) 0
adb shell sendevent /dev/input/event2 0 0 0
发现是不是松开音量- 已经生效了转存失败重新上传取消转存失败重新上传取消
好的功能要靠自己开发。现在再实验一下help里提到的其他内容吧转存失败重新上传取消转存失败重新上传取消
如果需要实现双击操作,可以先记录数据文件到taprecord。
在adb shell 下执行 dd if=/dev/input/event0 of=/sdcard/taprecord或者直接cat /dev/input/event0>/sdcard/taprecord
具体是event几可以通过上面介绍的getevent来获知。
然后操作手机,ctrl+C退出即可
最后执行adb shell "for i in `seq 1 2`; do dd if=/sdcard/taprecord of=/dev/input/event0;sleep 0.1; done" 就会发现设备已经双击了。