Android getevent,sendevent,input keyevent
来源:互联网 发布:京东销量查询软件 编辑:程序博客网 时间:2024/06/01 10:09
前言
getevent和sendevent是Android系统自带的获取设备的收发事件和模拟设备事件进行自动话测试。而input keyevent也在自动话测试中有很大的作用,用于模拟常用按键等。接下来就一一是实践角度分析此三个工具的使用方法。
getevent
进入android手机,然后输入getevent --help就可以查看该工具使用方法。
test@123:/data # getevent --help getevent: invalid option --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简单说几个常见的参数。【-t】显示事件发生的时间,【-p】显示设备上支持的事件类型和编码,【-l】显示事件类型的信息以标签的形式,【-r】事件出现的频率。
下面执行例子说明,执行如下的命令,然后按下手机的音量上键和下键
getevent -t执行结果如下:
test@123:/data # getevent -t could not get driver version for /dev/input/mice, Not a typewriteradd device 1: /dev/input/event0 name: "xxx-gpio-keys"add device 2: /dev/input/event3 name: "..............."add device 3: /dev/input/event2 name: "................."could not get driver version for /dev/input/mouse0, Not a typewriteradd device 4: /dev/input/event1 name: "adaptive_ts"[ 1488.476515] /dev/input/event0: 0001 0073 00000001[ 1488.476515] /dev/input/event0: 0000 0000 00000000[ 1488.631825] /dev/input/event0: 0001 0073 00000000[ 1488.631825] /dev/input/event0: 0000 0000 00000000[ 1489.424382] /dev/input/event0: 0001 0072 00000001[ 1489.424382] /dev/input/event0: 0000 0000 00000000[ 1489.548998] /dev/input/event0: 0001 0072 00000000[ 1489.548998] /dev/input/event0: 0000 0000 00000000我们需要对上述的一串数字进行说明,如下图:
看上图就可以看的一目了然了,而这些事件的定义在kernel/include/linux/input.h中。
/** * struct input_value - input value representation * @type: type of value (EV_KEY, EV_ABS, etc) * @code: the value code * @value: the value */struct input_value {__u16 type;__u16 code;__s32 value;};此结构体不就是上述设备名字后面的三列数据的定义。 而所谓的事件类型定义如下:
/* * Event types */#define EV_SYN0x00#define EV_KEY0x01#define EV_REL0x02#define EV_ABS0x03#define EV_MSC0x04#define EV_SW0x05#define EV_LED0x11#define EV_SND0x12#define EV_REP0x14#define EV_FF0x15#define EV_PWR0x16#define EV_FF_STATUS0x17#define EV_MAX0x1f#define EV_CNT(EV_MAX+1)常见的事件类型有EV_SYN(同步事件),EV_KEY(按键事件),EV_ABS(绝对事件)。而每个事件下面有不同的code定义,就按键事件下就有很多code,不在此一一列举了。列去三个我们下面要用到的。
#define KEY_VOLUMEDOWN114#define KEY_VOLUMEUP115#define KEY_POWER116/* SC System Power Down */#define BTN_TOUCH0x14a
ok,这下我们就很快能解析上述数据的含义了。注意(每个事件完成后都会存在一个KEY_SYN同步事件,用于同步上报事件。所有的数据是十六机制显示)
当然了,如果你觉得上面识别还是很不方法,可以使用-l参数。
test@123:/data # getevent -tl could not get driver version for /dev/input/mice, Not a typewriteradd device 1: /dev/input/event0 name: "xxxx-gpio-keys"add device 2: /dev/input/event3 name: "xxxxx"add device 3: /dev/input/event2 name: "xxx"could not get driver version for /dev/input/mouse0, Not a typewriteradd device 4: /dev/input/event1 name: "adaptive_ts"[ 3246.862919] /dev/input/event0: EV_KEY KEY_VOLUMEUP DOWN [ 3246.862919] /dev/input/event0: EV_SYN SYN_REPORT 00000000 [ 3247.058640] /dev/input/event0: EV_KEY KEY_VOLUMEUP UP [ 3247.058640] /dev/input/event0: EV_SYN SYN_REPORT 00000000 [ 3266.495595] /dev/input/event0: EV_KEY KEY_VOLUMEDOWN DOWN [ 3266.495595] /dev/input/event0: EV_SYN SYN_REPORT 00000000 [ 3266.635165] /dev/input/event0: EV_KEY KEY_VOLUMEDOWN UP [ 3266.635165] /dev/input/event0: EV_SYN SYN_REPORT 00000000从上就可以很方便的辨别是按键事件,分别为按下/抬起音量上键,按下/抬起音量下键。
接下来分析下绝对事件,一般为触摸屏事件。同样的办法执行getevent -t,然后按下触摸屏。
test@123:/data # getevent -t could not get driver version for /dev/input/mice, Not a typewriteradd device 1: /dev/input/event0 name: "xxx-gpio-keys"add device 2: /dev/input/event3 name: "xxxx"add device 3: /dev/input/event2 name: "xxxx"could not get driver version for /dev/input/mouse0, Not a typewriteradd device 4: /dev/input/event1 name: "adaptive_ts"[ 3449.957951] /dev/input/event1: 0003 0039 00000040[ 3449.957951] /dev/input/event1: 0003 0035 00000166[ 3449.957951] /dev/input/event1: 0003 0036 000001c5[ 3449.957951] /dev/input/event1: 0001 014a 00000001[ 3449.957951] /dev/input/event1: 0000 0000 00000000[ 3449.995643] /dev/input/event1: 0003 0039 ffffffff[ 3449.995643] /dev/input/event1: 0001 014a 00000000[ 3449.995643] /dev/input/event1: 0000 0000 00000000和上述一样,就不贴图分析数据了,直接说明数据的内容。
设备类型为/dev/input/event1,该input事件用作触摸屏事件。
0003: 代表事件类型为EV_ABS事件,0001为EV_KEY事件,0000为EV_SYN事件。
关于EV_ABS事件的code,需要贴出几个常见的code。
#define ABS_MT_ORIENTATION0x34/* Ellipse orientation */#define ABS_MT_POSITION_X0x35/* Center X touch position */#define ABS_MT_POSITION_Y0x36/* Center Y touch position */#define ABS_MT_TOOL_TYPE0x37/* Type of touching device */#define ABS_MT_BLOB_ID0x38/* Group a set of packets as a blob */#define ABS_MT_TRACKING_ID0x39/* Unique ID of initiated contact */#define ABS_MT_PRESSURE0x3a/* Pressure on contact area */code=0x39代表一个唯一的ID。
code=0x35代表触摸器按下的x坐标。
code=0x36代表触摸屏按下的y坐标。
可以按到上述按下的触摸屏坐标是: (0x166,0x1c5)=十进制(358,453)。
执行getevent -p命令可以看到设备尺寸等信息。
add device 4: /dev/input/event1 name: "adaptive_ts" events: KEY (0001): 009e 00ac 014a 0244 ABS (0003): 0000 : value 0, min 0, max 0, fuzz 0, flat 0, resolution 0 0001 : value 0, min 0, max 0, fuzz 0, flat 0, resolution 0 002f : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0 0035 : value 0, min 0, max 720, fuzz 0, flat 0, resolution 0 0036 : value 0, min 0, max 1280, fuzz 0, flat 0, resolution 0 0039 : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0 input props: INPUT_PROP_DIRECT比如0x35和0x36就对应的是该手机的尺寸的大小,大小是720*1280的。如果通过获得x,y坐标存在问题,可以通过如下公式转化:
x=(x-xmin)*480/(xmax-xmin) ;y=(y-ymin)*800/(ymax-ymin);
sendevent
和getevent方法一样,通过sendevent --help就可以获得使用方法。
test@123:/data # sendevent --help use: sendevent device type code value
发送按下power按键
sendevent /dev/input/event0 0001 0074 00000001 sendevent /dev/input/event0 0000 0000 00000000 sendevent /dev/input/event0 0001 0074 00000000 sendevent /dev/input/event0 0000 0000 00000000
input keyevent
用法如下:
input keyevent <keycode>
关于keycode可以通过查看Monkey常用的键值表。
0 --> "KEYCODE_UNKNOWN"1 --> "KEYCODE_MENU"2 --> "KEYCODE_SOFT_RIGHT"3 --> "KEYCODE_HOME"4 --> "KEYCODE_BACK"5 --> "KEYCODE_CALL"
0 0
- Android getevent,sendevent,input keyevent
- android getevent、sendevent、input keyevent 使用说明
- android之getevent/sendevent/input
- Android getevent/sendevent/input使用方法
- [Android]getevent,sendevent,input命令的使用
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android getevent/sendevent详解
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android getevent/sendevent详解
- Android sendevent/getevent 用法
- monkey定制脚本
- OkHttp3 (三)——创建与执行网络请求
- ioctl() fcntl() setsockopt() ioctlsocket() 用法
- 10-bat学习一
- 【编程题】多线程 (C++)
- Android getevent,sendevent,input keyevent
- Android lint工具检测出的各种情况与解决方案
- 雾霾“倾国倾城” 谣言肆虐你中招了么?
- 写在js文件里的变量如何通过FORM表单提交到action
- $(document).on('selectstart',function(){ return false; })是什么意思
- iOS开发 下拉刷新上拉加载更多详解
- 虚拟机vmware workstation unrecoverable error: (vmui)错误解决方法
- 自定义View(一)自定义View的分类
- 二分查找算法