以KEY_U和KeyEvent.KEYCODE_U的映射为例
1.在Generic.kl(android源码或adb root后在/system/usr/keylayout/)中有KEY_U的真实值
2.在KeyEvent.java中有KEYCODE_U的真实值
3. 在Activity里重写onKeyDown/onKeyUp,手掌按下,获取KeyEvent和keyCode值,KeyEvent的getScanCode()方法可以拿到该keyCode对应KEY真实值
4. adb shell后,使用getevent指令也可以获取当前KEY的真实值
我们每次按键会有四个输出,前两行为按下,后两行为抬起,0001指按键(也存在其他设备类型,这里我们不关心),0016是对应的十六进制按键值,这里就是驱动所设置的按键值,可以去找驱动提供头文件查看该值所对应的按键名称。0016转成十进制为22,然后在我们默认的kl文件(Generic.kl)中找到22对应Android中的按键值如下:
key 22 U
这里即将驱动上报的KEY_U转成了Android的KEYCODE_U按键
ps:evnet1代表拍一拍
getevent -l /dev/input/event1
5.参考
https://www.jianshu.com/p/1b0ae800b5bf
https://blog.csdn.net/weixin_41508767/article/details/117526507