Android自动化 -- sendevent/getevent 用法
2018-03-28 11:00
357 查看
https://blog.csdn.net/wy2963/article/details/70308302
getevent&sendevent 是android系统下的一个工具,可以 模拟 多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。这两个命令的源码在system/core/toolbox/下,sendevent.c getevent.c 关于event设备的获取,在 /proc/bus/input/devices 下面:$ adb shell cat /proc/bus/input/devices ========================= 一、getevent 获取getevent 的使用方法 : getevent -h
getevent 监控当前的事件, 鼠标事件, 按键事件, 拖动滑动 以及其他类型的event事件;使用getevent 获得/dev/input/eventX设备 汇报的事件,这个命令会输出所有event设备的 基本信息,如下:shell@pc7625:/ $ geteventadd device 1: /dev/input/event6
name: "accel"
add device 2: /dev/input/event5
name: "goodix_ts"
add device 3: /dev/input/event0
name: "Power Button"
add device 4: /dev/input/event1
name: "Video Bus"
add device 5: /dev/input/event4
name: "baytrailaudio Intel MID Audio Jack"
add device 6: /dev/input/event2
name: "gpio-lesskey"
add device 7: /dev/input/event3
name: "dollar_cove_power_button"表明系统有 7个event设备 ;--------------------------------------------------------------------------------在我的android设备里,event2 代表 音量加减按键;
shell@pc7625:/ $ getevent /dev/input/event2 &
点击 音量减按键 :按键 按下的log :0001 0072 00000001
0000 0000 00000000按键 弹起的log :
0001 0072 00000000
0000 0000 00000000其中/dev/input/event2 是device的名字 ;0001 是type;0072 是键码;最后一个根据type不同而不同;比如上面的 00000001 就是按下 音量键的keydown,00000000 是松开 音量键的keyup;具体的type,code,value的定义 可以在源码/frameworks/base/core/java/android/view/KeyEvent.java中找到; ============================= 二、sendevent: 命令格式 : sendevent [device] [type] [code] [value]需要注意的是在 getevent 中code显示的是十六进制, 而sendevent 中需要用 十进制
/dev/input/event3: 0000 0000 00000000 松开 正真的 音量加 按键:
/dev/input/event3: 0001 0073 00000000
/dev/input/event3: 0000 0000 00000000 ------------- 模拟 按键 ------------发送 按下 音量加 :shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 1
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
发送 松开 音量加 :
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 0
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
----------------------------------------------------------------------------------- type, code, value的定义可参看kernel/include/linux/input.h type如下定义:/*
* Event types
*/
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
#define EV_MSC 0x04
#define EV_SW 0x05
#define EV_LED 0x11
#define EV_SND 0x12
#define EV_REP 0x14
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
一般来说,常用的是EV_KEY, EV_REL, EV_ABS, EV_SYN分别对应keyboard, 相对坐标, 绝对坐标, 同步事件 EV_SYN则表示一组完整事件已经完成,需要处理,EV_SYN的code定义事件分发的类型EV_SYN对应的code如下:/*
* Synchronization events.
*/
#define SYN_REPORT 0
#define SYN_CONFIG 1
#define SYN_MT_REPORT 2
EV_KEY的code比较多,这里就不列出来了,可参照input.hEV_REL对应的code:/*
* Relative axes
*/
#define REL_X 0x00
#define REL_Y 0x01
#define REL_Z 0x02
#define REL_RX 0x03
#define REL_RY 0x04
#define REL_RZ 0x05
#define REL_HWHEEL 0x06
#define REL_DIAL 0x07
#define REL_WHEEL 0x08
#define REL_MISC 0x09
#define REL_MAX 0x0f
#define REL_CNT (REL_MAX+1)
EV_ABS对应的code:/*
* Absolute axes
*/
#define ABS_X 0x00
#define ABS_Y 0x01
#define ABS_Z 0x02
#define ABS_RX 0x03
#define ABS_RY 0x04
#define ABS_RZ 0x05
#define ABS_THROTTLE 0x06
#define ABS_RUDDER 0x07
#define ABS_WHEEL 0x08
#define ABS_GAS 0x09
#define ABS_BRAKE 0x0a
#define ABS_HAT0X 0x10
#define ABS_HAT0Y 0x11
#define ABS_HAT1X 0x12
#define ABS_HAT1Y 0x13
#define ABS_HAT2X 0x14
#define ABS_HAT2Y 0x15
#define ABS_HAT3X 0x16
#define ABS_HAT3Y 0x17
#define ABS_PRESSURE 0x18
#define ABS_DISTANCE 0x19
#define ABS_TILT_X 0x1a
#define ABS_TILT_Y 0x1b
#define ABS_TOOL_WIDTH 0x1c
#define ABS_VOLUME 0x20
#define ABS_MISC 0x28
###
#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
###
#define ABS_MAX 0x3f
#define ABS_CNT (ABS_MAX+1)
=====================================================================================
三、input keyevent如果想模拟按键,send event用起来比较繁琐,可以用input keyevent代替下面是input keyevent几个比较常用的用法:input keyevent 3 // Homeinput keyevent 4 // Backinput keyevent 19 //Upinput keyevent 20 //Downinput keyevent 21 //Leftinput keyevent 22 //Rightinput keyevent 23 //Select/Okinput keyevent 24 //Volume+input keyevent 25 // Volume-input keyevent 82 // Menu 菜单更多的按键事件keycode可参考:http://www.cnblogs.com/mgzc-1508873480/p/7826967.html 用senevent 模拟触屏事件sendevent /dev/input/event1 0003 0000 0000015e // ABS x 坐标sendevent /dev/input/event1: 0003 0001 000000df // ABS y 坐标sendevent /dev/input/event1: 0001 014a 00000001 // BTN touch事件 值为1sendevent /dev/input/event1: 0003 0018 00000000 // ABS pressure事件sendevent /dev/input/event1: 0001 014a 00000000 // BTN touch事件 值为0sendevent /dev/input/event1: 0000 0000 00000000 // sync事件
getevent&sendevent 是android系统下的一个工具,可以 模拟 多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。这两个命令的源码在system/core/toolbox/下,sendevent.c getevent.c 关于event设备的获取,在 /proc/bus/input/devices 下面:$ adb shell cat /proc/bus/input/devices ========================= 一、getevent 获取getevent 的使用方法 : getevent -h
getevent 监控当前的事件, 鼠标事件, 按键事件, 拖动滑动 以及其他类型的event事件;使用getevent 获得/dev/input/eventX设备 汇报的事件,这个命令会输出所有event设备的 基本信息,如下:shell@pc7625:/ $ geteventadd device 1: /dev/input/event6
name: "accel"
add device 2: /dev/input/event5
name: "goodix_ts"
add device 3: /dev/input/event0
name: "Power Button"
add device 4: /dev/input/event1
name: "Video Bus"
add device 5: /dev/input/event4
name: "baytrailaudio Intel MID Audio Jack"
add device 6: /dev/input/event2
name: "gpio-lesskey"
add device 7: /dev/input/event3
name: "dollar_cove_power_button"表明系统有 7个event设备 ;--------------------------------------------------------------------------------在我的android设备里,event2 代表 音量加减按键;
shell@pc7625:/ $ getevent /dev/input/event2 &
点击 音量减按键 :按键 按下的log :0001 0072 00000001
0000 0000 00000000按键 弹起的log :
0001 0072 00000000
0000 0000 00000000其中/dev/input/event2 是device的名字 ;0001 是type;0072 是键码;最后一个根据type不同而不同;比如上面的 00000001 就是按下 音量键的keydown,00000000 是松开 音量键的keyup;具体的type,code,value的定义 可以在源码/frameworks/base/core/java/android/view/KeyEvent.java中找到; ============================= 二、sendevent: 命令格式 : sendevent [device] [type] [code] [value]需要注意的是在 getevent 中code显示的是十六进制, 而sendevent 中需要用 十进制
1、模拟发送一个 音量加键:
按下 正真的 音量加 按键:/dev/input/event3: 0001 0073 00000001/dev/input/event3: 0000 0000 00000000 松开 正真的 音量加 按键:
/dev/input/event3: 0001 0073 00000000
/dev/input/event3: 0000 0000 00000000 ------------- 模拟 按键 ------------发送 按下 音量加 :shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 1
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
发送 松开 音量加 :
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 0
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
----------------------------------------------------------------------------------- type, code, value的定义可参看kernel/include/linux/input.h type如下定义:/*
* Event types
*/
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
#define EV_MSC 0x04
#define EV_SW 0x05
#define EV_LED 0x11
#define EV_SND 0x12
#define EV_REP 0x14
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
一般来说,常用的是EV_KEY, EV_REL, EV_ABS, EV_SYN分别对应keyboard, 相对坐标, 绝对坐标, 同步事件 EV_SYN则表示一组完整事件已经完成,需要处理,EV_SYN的code定义事件分发的类型EV_SYN对应的code如下:/*
* Synchronization events.
*/
#define SYN_REPORT 0
#define SYN_CONFIG 1
#define SYN_MT_REPORT 2
EV_KEY的code比较多,这里就不列出来了,可参照input.hEV_REL对应的code:/*
* Relative axes
*/
#define REL_X 0x00
#define REL_Y 0x01
#define REL_Z 0x02
#define REL_RX 0x03
#define REL_RY 0x04
#define REL_RZ 0x05
#define REL_HWHEEL 0x06
#define REL_DIAL 0x07
#define REL_WHEEL 0x08
#define REL_MISC 0x09
#define REL_MAX 0x0f
#define REL_CNT (REL_MAX+1)
EV_ABS对应的code:/*
* Absolute axes
*/
#define ABS_X 0x00
#define ABS_Y 0x01
#define ABS_Z 0x02
#define ABS_RX 0x03
#define ABS_RY 0x04
#define ABS_RZ 0x05
#define ABS_THROTTLE 0x06
#define ABS_RUDDER 0x07
#define ABS_WHEEL 0x08
#define ABS_GAS 0x09
#define ABS_BRAKE 0x0a
#define ABS_HAT0X 0x10
#define ABS_HAT0Y 0x11
#define ABS_HAT1X 0x12
#define ABS_HAT1Y 0x13
#define ABS_HAT2X 0x14
#define ABS_HAT2Y 0x15
#define ABS_HAT3X 0x16
#define ABS_HAT3Y 0x17
#define ABS_PRESSURE 0x18
#define ABS_DISTANCE 0x19
#define ABS_TILT_X 0x1a
#define ABS_TILT_Y 0x1b
#define ABS_TOOL_WIDTH 0x1c
#define ABS_VOLUME 0x20
#define ABS_MISC 0x28
###
#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
###
#define ABS_MAX 0x3f
#define ABS_CNT (ABS_MAX+1)
=====================================================================================
三、input keyevent如果想模拟按键,send event用起来比较繁琐,可以用input keyevent代替下面是input keyevent几个比较常用的用法:input keyevent 3 // Homeinput keyevent 4 // Backinput keyevent 19 //Upinput keyevent 20 //Downinput keyevent 21 //Leftinput keyevent 22 //Rightinput keyevent 23 //Select/Okinput keyevent 24 //Volume+input keyevent 25 // Volume-input keyevent 82 // Menu 菜单更多的按键事件keycode可参考:http://www.cnblogs.com/mgzc-1508873480/p/7826967.html 用senevent 模拟触屏事件sendevent /dev/input/event1 0003 0000 0000015e // ABS x 坐标sendevent /dev/input/event1: 0003 0001 000000df // ABS y 坐标sendevent /dev/input/event1: 0001 014a 00000001 // BTN touch事件 值为1sendevent /dev/input/event1: 0003 0018 00000000 // ABS pressure事件sendevent /dev/input/event1: 0001 014a 00000000 // BTN touch事件 值为0sendevent /dev/input/event1: 0000 0000 00000000 // sync事件
相关文章推荐
- 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 sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android getevent / sendevent的用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android sendevent/getevent 用法
- Android getevent/sendevent/input使用方法
- Shell之getevent/sendevent的用法(通过shell来做屏幕解锁)