adb shell input 及event

adb shell input以及event可以模拟用户点击。

可以用来写自动化测试脚本。


关于adb shell input的用法:

Usage: input [] [...]

The sources are:
      trackball
      joystick
      touchnavigation
      mouse
      keyboard
      gamepad
      touchpad
      dpad
      stylus
      touchscreen

The commands and default sources are:
      text (Default: touchscreen)
      keyevent [--longpress] ... (Default: keyboard)
      tap (Default: touchscreen)
      swipe [duration(ms)] (Default: touchscreen)
      press (Default: trackball)
      roll (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

发现是不是按住音量- 已经生效了uploading.4e448015.gif转存失败重新上传取消uploading.4e448015.gif转存失败重新上传取消

再运行一下

adb shell sendevent /dev/input/event2 1 $((0x72)) 0

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

发现是不是松开音量- 已经生效了uploading.4e448015.gif转存失败重新上传取消uploading.4e448015.gif转存失败重新上传取消

 

 

 

 

 

好的功能要靠自己开发。现在再实验一下help里提到的其他内容吧uploading.4e448015.gif转存失败重新上传取消uploading.4e448015.gif转存失败重新上传取消

如果需要实现双击操作,可以先记录数据文件到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" 就会发现设备已经双击了。

你可能感兴趣的:(adb shell input 及event)