Android 查看按键信息的常用命令详解

这篇具有很好参考价值的文章主要介绍了Android 查看按键信息的常用命令详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android 查看按键信息的常用命令详解

如果需要适配系统按键或者查看按键信息,那么按键基本命令和查看基本命令里面的信息是关键基础。

本文一起学习看出一下按键基本命令和里面的关键信息。

一、主要命令:

	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/event3
  name:     "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/event2
  name:     "aw8624_haptic"
add device 2: /dev/input/event0
  name:     "ACCDET"
add device 3: /dev/input/event3
  name:     "fts_ts"
add device 4: /dev/input/event1
  name:     "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/event2
  name:     "aw8624_haptic"
add device 2: /dev/input/event0
  name:     "ACCDET"
add device 3: /dev/input/event3
  name:     "fts_ts"
add device 4: /dev/input/event1
  name:     "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: false
  System UI Visibility: 0x8008
  Pointer Speed: 0
  Pointer Gestures Enabled: true
  Show Touches: false
  Pointer Capture Enabled: false

Event Hub State: //(1)事件状态信息是主要关注的
  BuiltInKeyboardId: -2
  Devices: //(2)Devices里面的每个信息都是对应不同的节点信息
    -1: Virtual
      Classes: 0x40000023
      Path: <virtual> (3)关注Path字符串,就是节点的位置,这里是虚拟,不清楚具体意义
      Enabled: true
      Descriptor: a718a782d34bc767f4689c232d64d527998ea7fd
      Location:
      ControllerNumber: 0
      UniqueId: <virtual>
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Virtual.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>
    1: aw8624_haptic
      Classes: 0x00000200
      Path: /dev/input/event2
      Enabled: true
      Descriptor: 65195a4ab35c59e79bbba55177be90fc42ed3ae6
      Location:
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile:
      KeyCharacterMapFile:
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>
    2: ACCDET
      Classes: 0x00000081
      Path: /dev/input/event0
      Enabled: true
      Descriptor: 1c78f7e0d16d4dbc8d3ab93943523f379203f90b
      Location:
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0019, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>
    3: fts_ts
      Classes: 0x00000015
      Path: /dev/input/event3
      Enabled: true
      Descriptor: a1cc21cba608c55d28d6dd2b1939004df0e0c756
      Location:
      ControllerNumber: 0
      UniqueId:
      Identifier: bus=0x0018, vendor=0x0000, product=0x0000, version=0x0000
      KeyLayoutFile: /system/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <none>
	  4: mtk-kpd //(4)按键事件的节点命名名称
      Classes: 0x00000001
      Path: /dev/input/event1 //(5)按键事件的节点位置,这个才是主要的,名称可以不可,但是节点必须找对
      Enabled: true
      Descriptor: f0d2e427e7a05eb6d316f5e14800c5ac7b6aee79
      Location:
      ControllerNumber: 0
      UniqueId:
      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.kcm
      ConfigurationFile:
      HaveKeyboardLayoutOverlay: false
      VideoDevice: <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_RECORD

key 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文章来源地址https://www.toymoban.com/news/detail-769332.html

四、总结

1、查看按键的基本命令

	getevent //查看所有键值事件的键值数值
	getevent -l //查看所有键值事件的键值字符串
	dumsys input //查看输入事件的相关信息,event对于的名称等信息

2、按键功能适配和修改

1、通过"getevent"查看事件节点和节点名称;
2、通过"dumpsys input"查看节点的具体使能的kl文件;
3、修改kl文件适配功能;

到了这里,关于Android 查看按键信息的常用命令详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android签名 一 查看签名信息

    你可能想知道 通过这篇文章可以解决哪些问题以及学到什么:  1.如果我们有一个应用,如何查看应用的签名信息?  2.如果我们有签名原始文件,如何查看签名文件中的签名信息? 这篇文章介绍了如何查看应用和签名文件中的签名信息。 keytool -list -printcert -jarfile [APK文件路

    2024年02月03日
    浏览(30)
  • 查看Android App包名,查看keystore的信息,导出公钥

    查看Android App包名的三种方法 cmd中输入命令:adb shell am monitor                     然后启动需要获取包名的应用 cmd中输入命令:adb shell pm list packages -3        查看自己安装的app包名 安卓系统中:设置——应用——正在运行 查看 查看keystore信息 cmd中输入命令 keytool -list

    2024年02月08日
    浏览(52)
  • Android 查看当前手机、APP的ABI架构信息

    命令:adb shell \\\"getprop |grep cpu\\\"  命令:adb shell getprop ro.product.cpu.abi     在 data/system/packages.xml 文件中找到自己 app 的相关配置信息,这里有明确指出该去哪里加载 so 文件,以及 app 所运行的 CPU 架构,所以我们可以运行如下命令: adb pull data/system/packages.xml    可能报错 :  

    2024年02月11日
    浏览(67)
  • Android 生成 keystore 证书并查看 MD5 等签名信息(Android Studio、Keytool)

    记得安装 Java JDK,有 java 环境才能走下面的操作。 生成 .keystore 证书,Keytool 指令详细介绍。 -genkeypair :原 -genkey ,Java 1.6 之后更改,表示生成密钥对 -alias :产生别名,每个 keystore 都会关联这一个独一无二的 alias,alias 不区分大小写 -keyalg :指定产生密钥的算法 -keypass :指

    2024年01月22日
    浏览(59)
  • 【Linux】查看系统各种信息的常用命令 (CPU、内存、进程、网口、磁盘、硬件、等等)

    Linux是一种开源的类Unix操作系统,它有很多不同的发行版,如Ubuntu、CentOS、Debian等。Linux系统提供了很多命令行工具,可以让用户方便地查看和管理系统的各种信息,如硬件配置、内存使用、进程状态、网络连接等。本文将介绍一些常用的命令,以及它们的用法和示例。 使用

    2024年02月15日
    浏览(46)
  • Linux命令200例:ps用于查看当前系统中运行的进程信息(常用)

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过 具体的系统的命令讲解 加上

    2024年02月12日
    浏览(57)
  • Android 通过adb命令查看应用流量

            通过adb shell ps -A  |  grep 包名  来获取app的 pid号         使用 adb shell cat /proc/#pid#/net/dev 命令 来获取流量数据 备注: Recevice: 表示收包 Transmit:  表示发包 bytes: 表示收发的字节数 packets: 表示收发正确的包量 errs: 表示收发错误的包量 drop: 表示收发丢弃的包量 wla

    2024年01月25日
    浏览(47)
  • Android查看签名信息系列 · 使用逆向分析工具JadxGUI获取签名

    前言 Android查看签名信息系列之使用逆向分析工具JadxGUI获取签名,通过这种方式,可以获取到的签名信息包括:MD5、SHA1、SHA-256、公钥(模数)等信息 实现方法 1、进入JadxGUI目录下的lib文件夹内,找到jadx-gui-1.4.7.jar文件 2、双击jadx-gui-1.4.7.jar进入图形界面,或者cmd进入lib所在路径

    2024年02月03日
    浏览(44)
  • Android 性能优化 命令行查看CPU使用率

    本文介绍cpu使用率概念,和使用ps命令、top命令和dumpsys cpuinfo命令来查看cpu使用率,帮助我们了解应用程序在运行过程中的整体状态和各个线程状态。 CPU利用率指系统中CPU的使用情况,通常以百分比表示CPU使用率。 在多核情况下,CPU使用率指的是所有核心的平均使用率。 通

    2024年02月05日
    浏览(55)
  • Android进阶之路 - 通过Gradle 窗口、插件、命令 查看项目依赖

    最近在处理一个依赖冲突的问题,虽然根据错误提示已经解决了问题;但还是很有必要了解一下 如何查看项目中各模块的依赖组件 ,以便于快速解决组件依赖的问题,故特记录于此 在实战中我们一般可以通过 Gradle窗口 、 Gradle插件 、以及 Terminal 执行Gradle相关命令 获取项目

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包