adb shell input 及event

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

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

再运行一下

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

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

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

 

 

 

 

 

好的功能要靠自己开发。现在再实验一下help里提到的其他内容吧tongue.gifuploading.4e448015.gif转存失败重新上传取消tongue.gifuploading.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" 就会发现设备已经双击了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值