wilon.github.io
wilon.github.io copied to clipboard
Android adb getevent/sendevent 详解
准备 adb events
- 下载 adb ,配置执行命令行
- 安卓手机打开调试,电脑连上数据线
- 执行
adb shell
,进入shell即为成功
类型 events
执行getevent
add device 1: /dev/input/event5
name: "uinput-fpc"
add device 2: /dev/input/event4
name: "sdm660-snd-card-skush Button Jack"
add device 3: /dev/input/event3
name: "sdm660-snd-card-skush Headset Jack"
add device 4: /dev/input/event0
name: "qpnp_pon"
could not get driver version for /dev/input/mice, Not a typewriter
add device 5: /dev/input/event2
name: "gpio-keys"
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 6: /dev/input/event1
name: "synaptics_dsx"
/dev/input/event0 # 按键事件0
/dev/input/event2 # 按键事件2
/dev/input/event1 # 屏幕事件
例:电源键
、音量-
是 event0,音量+
event2
参数变量 events
event 执行有三个变量:${事件} ${事件码} ${事件码参数}
参考:https://blog.csdn.net/muyimo/article/details/48733661
a. ${事件} 常量
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
c. ${事件码} 常量
EV_SYN
#define SYN_REPORT 0
#define SYN_CONFIG 1
#define SYN_MT_REPORT 2
EV_KEY
太多...略
EV_ABS
手跟屏幕的接触面类似椭圆,所以有以下参数
#define ABS_MT_TOUCH_MAJOR 0x30 /* 48 触摸椭圆的长轴 */
#define ABS_MT_TOUCH_MINOR 0x31 /* 49 触摸椭圆的短轴(如果为圆形则省略) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* 50 近似触摸椭圆的主轴 */
#define ABS_MT_WIDTH_MINOR 0x33 /* 51 近似触摸椭圆的短轴(如果为圆形则省略) */
#define ABS_MT_ORIENTATION 0x34 /* 52 触摸椭圆的斜度 */
#define ABS_MT_POSITION_X 0x35 /* 53 触摸椭圆的中心X */
#define ABS_MT_POSITION_Y 0x36 /* 54 触摸椭圆的中心Y */
#define ABS_MT_TOOL_TYPE 0x37 /* 55 触摸设备的类型 */
#define ABS_MT_BLOB_ID 0x38 /* 56 将包分组为blob ?。。 */
#define ABS_MT_TRACKING_ID 0x39 /* 57 初始触摸的唯一ID */
#define ABS_MT_PRESSURE 0x3a /* 58 触摸区域压力 */
b. ${事件码参数} 常量
根据 ${事件码} 来定义
记录 getevent
getevent
,${事件} ${事件码} ${事件码参数},三个变量是16进制,例:
/dev/input/event1: 0001 014a 00000000
/dev/input/event1: 0000 0000 00000000
/dev/input/event0: 0001 0074 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0074 00000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event2: 0001 0072 00000001
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0001 0072 00000000
/dev/input/event2: 0000 0000 00000000
发送 sendevent
event 执行:${事件} ${事件码} ${事件码参数},三个变量是10进制
例1:点击电源键
sendevent /dev/input/event0 1 116 1 # 按下电源键
sendevent /dev/input/event0 0 0 0 # 按下电源键done
sendevent /dev/input/event0 1 116 0 # 弹起电源键
sendevent /dev/input/event0 0 0 0 # 弹起电源键done
解析:event0 1 116 1
,${键事件} EV_KEY,${键事件码} 116,${键事件码参数} 1按下,0弹起。
必须有done,否则就成了长按。
例2:滑动屏幕,画一个 L
// 开始
sendevent /dev/input/event1 3 57 30654 # 事件EV_ABS,初始接触的唯一ID,自增
sendevent /dev/input/event1 1 330 1 # 事件EV_KEY,按下屏幕
// L 起点
sendevent /dev/input/event1 3 53 260 # 事件EV_ABS,触摸椭圆的中心X
sendevent /dev/input/event1 3 54 856 # 事件EV_ABS,触摸椭圆的中心Y
sendevent /dev/input/event1 3 48 4 # 事件EV_ABS,触摸椭圆的长轴
sendevent /dev/input/event1 3 49 3 # 事件EV_ABS,触摸椭圆的短轴
sendevent /dev/input/event1 0 0 0 # done
// L 转折点
sendevent /dev/input/event1 3 53 260 # 事件EV_ABS,触摸椭圆的中心X
sendevent /dev/input/event1 3 54 1432 # 事件EV_ABS,触摸椭圆的中心Y
sendevent /dev/input/event1 3 48 5 # 事件EV_ABS,触摸椭圆的长轴
sendevent /dev/input/event1 3 49 3 # 事件EV_ABS,触摸椭圆的短轴
sendevent /dev/input/event1 0 0 0 # done
// L 终点
sendevent /dev/input/event1 3 53 536 # 事件EV_ABS,触摸椭圆的中心X
sendevent /dev/input/event1 3 54 1432 # 事件EV_ABS,触摸椭圆的中心Y
sendevent /dev/input/event1 3 48 5 # 事件EV_ABS,触摸椭圆的长轴
sendevent /dev/input/event1 3 49 3 # 事件EV_ABS,触摸椭圆的短轴
sendevent /dev/input/event1 0 0 0 # done
// 结束
sendevent /dev/input/event1 3 57 4294967295 # 事件EV_ABS,初始接触的唯一ID end
sendevent /dev/input/event1 1 330 0 # 事件EV_KEY,离开屏幕
sendevent /dev/input/event1 0 0 0 # done