Skip to content

Android adb getevent/sendevent 详解 #14

Description

@wilon

准备 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions