其实此文是一年之前应一个 Milestone 机友的求助(返回键失灵,希望用搜索键替代返回键)而写的,后来又发到了论坛上,现在拿来就是为了充充门面,让本博客显得有点牛逼的样子。

此文是以 Milestone(XT702)为参照所写,其原理适用于大部分基于 Android 的设备(包含但不限于手机),但是又因 Android 设备的高度定制性,此方法不可能完全适用于所有 Android 设备,映射值需要参考对应设备的映射表,不能混用。

Android 使用标准的 Linux 输入事件设备/dev/input/,驱动按键定义在 Linux 内核/include/linux/input.h中,但是 Android 系统没有直接使用映射后的值,而是对其再进行了一次映射。从内核标准键值到 Android 所用的键值映射表定义在 Android 文件系统的/system/usr/keylayout目录下。Android 标准的键值映射表文件为 qwerty.kl,定义如下:

KEY 键值 ID 映射值 Flag
key 1 BACK WAKE_DROPPED
key 2 1  
key 3 2  
key 4 3  
key 5 4  
key 6 5  
key 7 6  
key 8 7  
key 9 8  
key 10 9  
key 11 0  
key 12 MINUS  
key 13 EQUALS  
key 14 DEL  
key 15 TAB  
key 16 Q  
key 17 W  
key 18 E  
key 19 R  
key 20 T  
key 21 Y  
key 22 U  
key 23 I  
key 24 O  
key 25 P  
key 26 LEFT_BRACKET  
key 27 RIGHT_BRACKET  
key 28 ENTER  
key 30 A  
key 31 S  
key 32 D  
key 33 F  
key 34 G  
key 35 H  
key 36 J  
key 37 K  
key 38 L  
key 39 SEMICOLON  
key 40 APOSTROPHE  
key 42 SHIFT_LEFT  
key 43 BACKSLASH  
key 44 Z  
key 45 X  
key 46 C  
key 47 V  
key 48 B  
key 49 N  
key 50 M  
key 51 COMMA  
key 52 PERIOD  
key 53 SLASH  
key 54 SHIFT_RIGHT  
key 56 ALT_LEFT  
key 57 SPACE  
key 59 MENU WAKE_DROPPED
key 60 SOFT_RIGHT WAKE
key 61 CALL WAKE_DROPPED
key 62 ENDCALL WAKE_DROPPED
key 100 ALT_RIGHT  
key 102 HOME WAKE
key 103 DPAD_UP WAKE_DROPPED
key 105 DPAD_LEFT WAKE_DROPPED
key 106 DPAD_RIGHT WAKE_DROPPED
key 107 ENDCALL WAKE_DROPPED
key 108 DPAD_DOWN WAKE_DROPPED
key 114 VOLUME_DOWN  
key 115 VOLUME_UP  
key 116 POWER WAKE
key 127 SEARCH WAKE_DROPPED
key 139 MENU WAKE_DROPPED
key 150 EXPLORER  
key 155 ENVELOPE  
key 158 BACK WAKE_DROPPED
key 212 CAMERA  
key 215 AT  
key 217 SEARCH WAKE_DROPPED
key 227 STAR  
key 228 POUND  
key 229 MENU WAKE_DROPPED
key 230 SOFT_RIGHT WAKE
key 231 CALL WAKE_DROPPED
key 232 DPAD_CENTER WAKE_DROPPED
key
399 GRAVE  

很明显,这是依照标准 QWERTY 电脑键盘从左至右从上到下的顺序排列的。

*映射值:
即相应键值的英文名称,具体含义搜索一下便知。注意需要全部使用大写。

*Flag:
SHIFT:按下时,自动加上 SHIFT 键值。
ALT:按下时,自动加上 ALT 键值。
CAPS:按下时,自动带上 CAPS 大写。
WAKE:按下时,当设备进入睡眠的时候,按下这个键将唤醒,并且发送消息给应用层。
WAKE_DROPPED:按下时,且设备正处于睡眠,设备被唤醒,但是不发送消息给应用层。

只要打开qwerty.kl,将其中对应的 Key 的 ID 后面的键值改为需要的键值即可。再用 root explorer 等具有系统文件操作功能的文件管理器把qwerty.kl移动到根目录的/system/usr/keylayout/里覆盖同名文件即可。(电脑端建议使用 notepad++ 等文本编辑器打开qwerty.kl文件)

例如:用搜索键替代返回键:

key 127    SEARCH            WAKE_DROPPED
key 217    SEARCH            WAKE_DROPPED

参看上面的键值映射表可以知道返回键的键值定义为 BACK。 然后需要将qwerty.kl中的对应位置改成

key 127    BACK            WAKE_DROPPED
key 217    BACK            WAKE_DROPPED

将该文件回拷到手机上时最好先放到手机内非/sdcard/的目录,修改好相应的权限(CHMOD 644以上)之后再拷入/system/usr/keylayout/,然后重启即可。

为了安全起见,在操作之前最好对手机进行 nandroid 备份。

参考这种方法,基本可以实现将任意键修改为你所需要的功能。

  1. [...] 文章非原创,来自 http://xia.im/change-key-layout-on-android/ 其实此文是一年之前应一个 Milestone 机友的求助(返回键失灵,希望用搜索键替代返回键)而写的,后来又发到了论坛上,现在拿来就是为了充充门面,让本博客显得有点牛逼的样子。[...]