做房产网站多少钱抖音优化是什么意思
Android 查看按键信息的常用命令详解
文章目录
- Android 查看按键信息的常用命令详解
- 一、主要命令:
- 二、命令详解
- 1、getevent
- 2、getevent -l
- 3、dumsys input
- 4、cat XXX.kl
- 4、cat /dev/input/eventX
- 5、getevent 其他命令
- 6、input keyevent XX
- 三、简单示例修改
- 四、总结
- 1、查看按键的基本命令
- 2、按键功能适配和修改
如果需要适配系统按键或者查看按键信息,那么按键基本命令和查看基本命令里面的信息是关键基础。
本文一起学习看出一下按键基本命令和里面的关键信息。
一、主要命令:
getevent //查看所有键值事件的键值数值getevent -l //查看所有键值事件的键值字符串dumsys input //查看输入事件的相关信息,event对于的名称等信息cat /dev/input/eventX //只查看某个键值事件,Android9或者更新版本会乱码ls -l /system/usr/keylayout //查看系统有哪些kl文件
除了"dumpsys input"这个命令不需要su/root权限,其他命令都是需要获取权限才能获得信息。
简单示例:
C:\Users\As11040>adb shell
atom:/ $ getevent
could not open /dev/input/event2, Permission denied
could not open /dev/input/event0, Permission denied
add device 1: /dev/input/event3name: "fts_ts"
could not open /dev/input/event1, Permission denied
这里可以看到提示无法读取里面的 dev/input/eventX 节点数据,权限禁止。
所以su权限或者root权限是需要的。
但是也可能跟平台,之前测试其他平台有的是可以 “getevent”,但是cat 里面的节点不行。
二、命令详解
这里用已root 的小米手机讲解。
1、getevent
按下音量减,再按音量加按键的打印:
C:\Users\As11040>adb shell
atom:/ $ su
atom:/ #
130|atom:/ # getevent
//(1)这里可以查看到按键的eventX节点,和节点在内核上的命名名称
add device 1: /dev/input/event2name: "aw8624_haptic"
add device 2: /dev/input/event0name: "ACCDET"
add device 3: /dev/input/event3name: "fts_ts"
add device 4: /dev/input/event1name: "mtk-kpd"//(2)按下音量减按键,这里第二列的0001 对应的数据才是有用的数据,可以看到音量减键对应的按键键值是0x72
/dev/input/event1: 0001 0072 00000001 //(3)1是按下
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 0072 00000000 //(4)0是抬起
/dev/input/event1: 0000 0000 00000000//(5)按下音量加按键,可以看到音量加键对应的按键键值是0x73
/dev/input/event1: 0001 0073 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 0073 00000000
/dev/input/event1: 0000 0000 00000000
getevent 作为查看键值最常用的命令,可以查看到kl文件对于的按键的键值。
getevent后获取到有用的信息:
(1)系统触摸,按键,键盘等输入设备所有的数据节点eventX以及节点对应的名称命名name
这个节点的名称有些情况还是非常重要的,具体选择kl文件的时候可能会判断到是否存在对应的kl文件。
(2)按键键值对应的16进制数值
记住这里显示是16进制的键值,但是按键配置文件kl中,显示的是10进制的数值
比如音量减 0x72 对应10进制值是16*7+2=114,音量加 0X73-->115
(3)按键的节点数据在 "/dev/input/event1" 里面
(4)底层对该节点的命名名称是 "mtk-kpd"
这个键值数值有啥用呢,其实是对应kl文件找到事件名称,给底层发送事件。
后面会有关联介绍。
2、getevent -l
//(1)这里可以查看到按键的eventX节点,和节点在内核上的命名名称
130|atom:/ # getevent -l
add device 1: /dev/input/event2name: "aw8624_haptic"
add device 2: /dev/input/event0name: "ACCDET"
add device 3: /dev/input/event3name: "fts_ts"
add device 4: /dev/input/event1name: "mtk-kpd"//(2)按下音量减按键,这里第三列的DOWN/UP对应的数据才是有用的数据,可以看到音量减键对应的按键字符串是 KEY_VOLUMEDOWN
/dev/input/event1: EV_KEY KEY_VOLUMEDOWN DOWN // (3)kl文件中定义的是 VOLUMEDOWN
/dev/input/event1: EV_SYN SYN_REPORT 00000000
/dev/input/event1: EV_KEY KEY_VOLUMEDOWN UP
/dev/input/event1: EV_SYN SYN_REPORT 00000000/dev/input/event1: EV_KEY KEY_VOLUMEUP DOWN // (4)kl文件中定义的是 KEY_VOLUMEUP
/dev/input/event1: EV_SYN SYN_REPORT 00000000
/dev/input/event1: EV_KEY KEY_VOLUMEUP UP
/dev/input/event1: EV_SYN SYN_REPORT 00000000
“getevent -l” 这个命名一般人不怎么使用,但是用来查看按键事件的意义还是有价值的。
KEY_XXX 的 XXX 字符串是发送给底层的命令。
VOLUMEDOWN 就是音量减,VOLUMEUP就是音量加。
3、dumsys input
这个命令里面信息最多最具体,属于input系统的默认配置信息。
主要相关信息如下:
atom:/ # dumpsys input
INPUT MANAGER (dumpsys input)Input Manager State:Interactive: falseSystem UI Visibility: 0x8008Pointer Speed: 0Pointer Gestures Enabled: trueShow Touches: falsePointer Capture Enabled: falseEvent Hub State: //(1)事件状态信息是主要关注的BuiltInKeyboardId: -2Devices: //(2)Devices里面的每个信息都是对应不同的节点信息-1: VirtualClasses: 0x40000023Path: <virtual> (3)关注Path字符串,就是节点的位置,这里是虚拟,不清楚具体意义Enabled: trueDescriptor: a718a782d34bc767f4689c232d64d527998ea7fdLocation:ControllerNumber: 0UniqueId: <virtual>Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000KeyLayoutFile: /system/usr/keylayout/Generic.klKeyCharacterMapFile: /system/usr/keychars/Virtual.kcmConfigurationFile:HaveKeyboardLayoutOverlay: falseVideoDevice: <none>1: aw8624_hapticClasses: 0x00000200Path: /dev/input/event2Enabled: trueDescriptor: 65195a4ab35c59e79bbba55177be90fc42ed3ae6Location:ControllerNumber: 0UniqueId:Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000KeyLayoutFile:KeyCharacterMapFile:ConfigurationFile:HaveKeyboardLayoutOverlay: falseVideoDevice: <none>2: ACCDETClasses: 0x00000081Path: /dev/input/event0Enabled: trueDescriptor: 1c78f7e0d16d4dbc8d3ab93943523f379203f90bLocation:ControllerNumber: 0UniqueId:Identifier: bus=0x0019, vendor=0x0000, product=0x0000, version=0x0000KeyLayoutFile: /system/usr/keylayout/Generic.klKeyCharacterMapFile: /system/usr/keychars/Generic.kcmConfigurationFile:HaveKeyboardLayoutOverlay: falseVideoDevice: <none>3: fts_tsClasses: 0x00000015Path: /dev/input/event3Enabled: trueDescriptor: a1cc21cba608c55d28d6dd2b1939004df0e0c756Location:ControllerNumber: 0UniqueId:Identifier: bus=0x0018, vendor=0x0000, product=0x0000, version=0x0000KeyLayoutFile: /system/usr/keylayout/Generic.klKeyCharacterMapFile: /system/usr/keychars/Generic.kcmConfigurationFile:HaveKeyboardLayoutOverlay: falseVideoDevice: <none>4: mtk-kpd //(4)按键事件的节点命名名称Classes: 0x00000001Path: /dev/input/event1 //(5)按键事件的节点位置,这个才是主要的,名称可以不可,但是节点必须找对Enabled: trueDescriptor: f0d2e427e7a05eb6d316f5e14800c5ac7b6aee79Location:ControllerNumber: 0UniqueId:Identifier: bus=0x0019, vendor=0x2454, product=0x6500, version=0x0010 //(6)各版本号,寻找kl使用到KeyLayoutFile: /system/usr/keylayout/mtk-kpd.kl //(7)实际起作用的kl文件KeyCharacterMapFile: /system/usr/keychars/Generic.kcmConfigurationFile:HaveKeyboardLayoutOverlay: falseVideoDevice: <none>Unattached video devices:<none>
"dumpsys input"命令的信息是很多的,这里只显示和分析主要的。
查看和分析“dumpsys input”日志思路:
1、根据getevent 获取到事件的节点,比如这里按键节点是 event1
2、“dumpsys input”查看需要查找的节点的信息,比如这里的 event1 和 名称 mtk-kpd
3、查看里面的真正起作用的kl文件,比如这里是 /system/usr/keylayout/mtk-kpd.kl
其实到这里主要信息已经看完了,但是要怎么理解和运用是要一定基础的。
后面会有个别修改示例分析。
4、cat XXX.kl
查询都实际使用的kl文件后,可以cat 查看里面的文件
比如cat上面的 /system/usr/keylayout/mtk-kpd.kl 文件查看到部分信息如下:
key 56 ALT_LEFT
key 100 ALT_RIGHT
key 42 SHIFT_LEFT
key 54 SHIFT_RIGHT
key 57 SPACE
key 58 SOFT_RIGHT
key 465 LAST_CHANNEL
key 402 CHANNEL_UP
key 403 CHANNEL_DOWN
key 115 VOLUME_UP //音量加
key 114 VOLUME_DOWN //音量减
key 113 VOLUME_MUTE
key 28 DPAD_CENTER
key 103 DPAD_UP
key 108 DPAD_DOWN
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 158 BACK //返回
key 139 MENU //菜单
key 102 HOME //主页
key 398 PROG_RED
key 399 PROG_GREEN
key 400 PROG_YELLOW
key 401 PROG_BLUE
key 165 MEDIA_PREVIOUS
key 163 MEDIA_NEXT
key 168 MEDIA_REWIND
key 208 MEDIA_FAST_FORWARD
key 164 MEDIA_PLAY_PAUSE
key 166 MEDIA_STOP
key 167 MEDIA_RECORDkey 155 ENVELOPE
key 12 MINUS
key 13 EQUALS
key 215 AT
key 130 ZOOM_IN
key 131 ZOOM_OUT
#key 15 BACK
key 466 TV_INPUT
key 111 PAGE_UP
key 112 PAGE_DOWN
key 358 INFO
key 213 CAPTIONS
key 214 MEDIA_AUDIO_TRACK
key 216 NUM_LOCK
key 217 GUIDE
4、cat /dev/input/eventX
这个是在手机的Android19-13的设备上查看会乱码,不清楚是Android 版本问题还是具体系统代码问题?
很久以前这样看过,打印的和getevent 的日志是一样的,但是只打印某个类型的数据。
其实要打印某个event的事件,是可以通过grep 过滤显示的。
比如需要只显示 按键事件的日志:
getevent | grep event1
5、getevent 其他命令
1|console:/ # getevent -help
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) //详细掩码(错误=1,dev=2,名称=4,信息=8,错误=16,位置事件=32,道具=64)-d: show HID descriptor, if available //显示HID描述符(如果可用)-p: show possible events (errs, dev, name, pos. events) //显示可能的事件(错误、开发、名称、位置事件)-i: show all device info and possible events //显示所有设备信息和可能的事件 , 包含dumpsys input 的主要信息-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 接收到打印速率事件
1|console:/ #
上面命令可以一次打印多个,大部分都没有过!
6、input keyevent XX
input命令估计也很多人用过,用得较多的是input text XX,input keyevent XX估计用得比较少。
input keyevent XX //这里的XX数值就是底层的数值,而不是上层kl里面定义的数值
比如:
input keyevent 24 //音量加,上层是 115
input keyevent 25 //音量减,上层是 114
input keyevent 3 //Home.上层是 102
用串口输入的事件,getevent 打印是不会再收到的。
上层和底层数值 上是没有任何关联的,都是在两个不同的文件定义各自的数值(从1开始一直完后加),是使用字符串关联起来的。
三、简单示例修改
在实际场景中,有可能需要替换掉某个按键的具体功能,
比如把键盘“回车”按键的功能换成“确定”功能;去除Home按键,或者Home按键换成其他功能。
这里简单修改一下,音量减按键修改成音量加按键的功能:
修改:/system/usr/keylayout/mtk-kpd.kl key 115 VOLUME_UP //音量加
key 114 VOLUME_UP //音量减,修改成音量加功能字符串
实现修改的方式可以pull文件后再push进去或者使用busybox vi XXX 功能,都是需要root权限的!
这里只是测试验证功能,实际没啥这样改的场景哈。
重启设备后,按下音量加或者音量减按键,音量都是加的。证明修改是ok的。
这个也说明kl 文件中,字符串指令 才是底层接收的指令。
上层这里定义的 key 115 只是上层对应的数值,
底层其实也是有自己的数值的比如音量加按键底层数值是 24。
如果要添加自定义键值可以参考:https://www.likecs.com/show-258237.html
四、总结
1、查看按键的基本命令
getevent //查看所有键值事件的键值数值getevent -l //查看所有键值事件的键值字符串dumsys input //查看输入事件的相关信息,event对于的名称等信息
2、按键功能适配和修改
1、通过"getevent"查看事件节点和节点名称;
2、通过"dumpsys input"查看节点的具体使能的kl文件;
3、修改kl文件适配功能;