其实此文是一年之前应一个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/的目录,修改好相应的权限(CHOMD 644以上)之后再拷入/system/usr/keylayout/ ,然后重启即可。

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

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