今天在修改app的时候发现调用KeyEvent.keyCodeToString()返回结果和Google的标准不同,开始以为自己程序有问题,结果在我自己的设备上跑一次却发现返回结果符合标准。所以决定看看对应版本的源码到底发生了什么。
进入keyCodeToString()
发现它调用了native方法,
找它native的实现,因为KeyEvent的全名为
package android.view;
所以它方法名为 android.view.keyCodeToString,对应的c文件中的方法名字为android_view_keyCodeToString()
在/framework/base/core/jni/中可以找到对应的文件名 [包名]_[类名].cpp,即android_view_KeyEvent.cpp,
更详细可以自行查看https://blog.csdn.net/hp910315/article/details/51733410这篇博客
发现又调用了KeyEvent::getLabel(keyCode)方法,继续跟进,发现这个文件中没有我们要找的方法,查看它导入其它头文件,经过查找发现它在input/Input.h文件中
,进入Input.h
发现这个方法又只出现过一次,查看文件首部
在<input/InputEventLabels.h有它的实现,进入
终于发现熟悉的身影,查看KEYCODES
发现居然多添加了一个SHIFT,简直SHIT,之后发现有人改了这一个地方,明明官方特意加了NOTE,都提醒说不能只改这一个地方啊,我哭了
以后一定注意代码规范,不要给后人挖坑
网友评论