其实此文是一年之前应一个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_BRACKE |
|
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 |
|
*Flags:
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/的目录,修改好相应的权限(CHOMD 644以上)之后再拷入/system/usr/keylayout/ ,然后重启即可。
为了安全起见,在操作之前最好对手机进行nandroid备份。
参考这种方法,基本可以实现将任意键修改为你所需要的功能。
|