键盘布局映射文件通常放在/system/usr/keylayout下
文件格式:
键映射文件通常以UTF8文本文件格式存储于设备,通常有如下特性:
注释:用#表示,以#开头的内容都将被忽略。
空白:所有的空行被忽略
键定义:键定义遵循如下格式key SCANCODE KEYCODE [FLAGS...],当扫描码是一个数字,键码定义在你描述的布局文件android.keylayout.xxx。

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

下面我们以DHD为例,进行修改。
原键盘布局映射文件spade-keypad-v0.k如下:
key 102   HOME              WAKE_DROPPED
key 139   MENU              WAKE_DROPPED
key 158   BACK              WAKE_DROPPED
key 217   SEARCH            WAKE_DROPPED
key 116   POWER             WAKE_DROPPED
key 114   VOLUME_DOWN       WAKE
key 115   VOLUME_UP         WAKE

现在我们就来修改一下,让音量+键也能像电源键那样唤醒屏幕,修改后的内容如下:
key 102   HOME              WAKE_DROPPED
key 139   MENU              WAKE_DROPPED
key 158   BACK              WAKE_DROPPED
key 217   SEARCH            WAKE_DROPPED
key 116   POWER             WAKE_DROPPED
key 114   VOLUME_DOWN       WAKE
key 115   POWER            


嗯,这是网上的很流行的做法。下面说说个人实际做法。


qwerty.kl这个文件是Android系统默认的全键盘布局文件,也就是说,刚开机进入Android系统时,系统默认读取该文件,读取里面的按键映射。【我的索爱X8的qwerty.kl文件内容如下 】



# Copyright (c) 2009, Code Aurora Forum.



#



# Licensed under the Apache License, Version 2.0 (the "License");



# you may not use this file except in compliance with the License.



# You may obtain a copy of the License at



#



# http://www.apache.org/licenses/LICENSE-2.0



#



# Unless required by applicable law or agreed to in writing, software



# distributed under the License is distributed on an "AS IS" BASIS,



# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.



# See the License for the specific language governing permissions and



# limitations under the License.



#





#



 BACK           



 MENU           



 HOME           



  VOLUME_UP    WAKE



 VOLUME_DOWN   WAKE









 POWER            WAKE_DROPPED



可以看到,里面对Android手机的按键进行了一对一的功能映射,类似于函数的映射。


而里面我们要关注的内容只有这几个


  VOLUME_UP    WAKE



 VOLUME_DOWN   WAKE


WAKE:当按下,当设备进入睡眠的时候,按下这个键将唤醒,而且发送消息给应用层。
WAKE_DROPPED:当按下,且设备正处于睡眠,设备被唤醒,但是不发送消息给应用层。




但是,前提是手机里面没有用户或者第三方定义的 .kl文件,系统才会默认读取qwerty.kl文件。


shakira_keypad.kl



【robyn_keypad.kl文件内容】


# Copyright (c) 2009, Code Aurora Forum.



#



# Licensed under the Apache License, Version 2.0 (the "License");



# you may not use this file except in compliance with the License.



# You may obtain a copy of the License at



#



# http://www.apache.org/licenses/LICENSE-2.0



#



# Unless required by applicable law or agreed to in writing, software



# distributed under the License is distributed on an "AS IS" BASIS,



# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.



# See the License for the specific language governing permissions and



# limitations under the License.



#





#



 BACK           



 MENU           



 HOME           



 VOLUME_UP      WAKE



 VOLUME_DOWN   WAKE









 POWER            WAKE_DROPPED



 SEARCH        



 POWER        



【shakira_keypad.kl文件内容】


# Copyright (c) 2009, Code Aurora Forum.



#



# Licensed under the Apache License, Version 2.0 (the "License");



# you may not use this file except in compliance with the License.



# You may obtain a copy of the License at



#



# http://www.apache.org/licenses/LICENSE-2.0



#



# Unless required by applicable law or agreed to in writing, software



# distributed under the License is distributed on an "AS IS" BASIS,



# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.



# See the License for the specific language governing permissions and



# limitations under the License.



#





#



 BACK           



 MENU           



 HOME           



 VOLUME_UP      WAKE



 VOLUME_DOWN   WAKE









 POWER            WAKE_DROPPED



 SEARCH        



 POWER        




 VOLUME_UP      WAKE 修改为  key 115         




【强调一下,先将 qwerty.kl 或第三方的 .kl文件备份出来,在电脑端修改,然后再用RE管理器复制到/system/usr/keylayout下, 请用EditPlus或者Notepad++这类软件来修改,主页君用的是sublime text2,这是因为这些文件保存格式为UTF-8,手机端修改会引起格式不对 】




复制完后,记得修改权限,将这几个文件的权限都修改为: 群组,读写;用户,读写;其他,只读


4虚拟键映射失效,因为布局文件无法读取。(本人结果是所有按键都不能用,相当麻烦- -)


修改权限的方法为:长按文件,然后选权限



弄完之后,重启手机,大功告成!



实际效果就是,音量键跟电源键一样,可以唤醒屏幕,也可以让屏幕休眠,但是音量键就没用了- -不过听歌时可以通过音乐软件调节音量,这是这种方法的一个BUG,有一些替代方法是使用手机软件,同时也是用音量键,但是这要安装这种软件,该软件就会一直驻在系统进程中,会很耗电,也会拉慢系统速度,所以两种方法随你选择。



这是我找到的一个软件,就是音量键唤醒屏幕的,没安装过


http://bbs.fengbao.com/forum.php?mod=viewthread&tid=1367747&reltid=277413&pre_pos=9&ext=



此外,还可以对添加手机按键映射,但这些已经涉及到底层驱动的问题了,需要在Linux下进行修改驱动,我还没弄到这么深,就不说了。



【最后,对一些有用的资料进行整合】


1、


有时候,我们还需要修改软键盘的键字符映射文件,以便能输入特殊字符,例如当我们输入$的时候,实际上是要输入¥。
下面就讲讲键字符映射文件的修改。

键字符映射位于:/system/usr/keychars下
比如对于一个特定的设备xxx,设置android.keychar.xxx系统属性,用全路径表示去描述所需的键字符映射。如果你没有描述任何一个键字符映射,系统将默认使用/system/usr/keychar/qwerty.kcm.bin
文件格式:
键字符映射文件以二进制减少加载时间的形式存储于设备中,键字符映射文件有如下特征:
注释:以#开始为注释
空行:所有的空行被忽略
列定义:当一个事件来临的时候按下组合键。这个事通常是MODIFIER_SHIFT,MODIFIER_CTRL,MODIFIER_ALT的组合。
O                     no modifiers
S                     MODIFIER_SHIFT
C                     MODIFIER_CONTROL
L                     MODIFIER_CAPS_LOCK
A                     MODIFIER_ALT

键值定义:键值定义遵循如下规则:

键 扫描码 字符[....]
扫描码和字符通常是一个十进制的值或者是UTF8字符,可以通过strtol的解析。

键字符文件的示例:
下面这个文件来自于android/src/device/product/generic/tuttle2.kcm,代表了一个完整的键字符文件。
以type开始的语句描述了你所要描述键盘的类型,大体分为三种
1:NUMERIC,12键的数字键盘
2:Q14:键盘包括所有的字符,但是可以一键多个字符。
3:QWERTY键盘包括了所有可能的字符和数字,类似于全键盘。

下面是一个QWERTY全键盘的定义示例,因为android主要用于手机,手机一般是全键。
# Copyright 2007 The Android Open Source Project
[type=QWERTY]
# keycode   base    caps    fn      caps_fn number  display_label
A           'a'     'A'     '%'     0x00    '%'     'A'
B           'b'     'B'     '='     0x00    '='     'B'
C           'c'     'C'     '8'     0x00E7  '8'     'C'
D           'd'     'D'     '5'     0x00    '5'     'D'
E           'e'     'E'     '2'     0x0301  '2'     'E'
F           'f'     'F'     '6'     0x00A5  '6'     'F'
G           'g'     'G'     '-'     '_'     '-'     'G'
H           'h'     'H'     '['     '{'     '['     'H'
I           'i'     'I'     '$'     0x0302  '$'     'I'
J           'j'     'J'     ']'     '}'     ']'     'J'
K           'k'     'K'     '"'     '~'     '"'     'K'
L           'l'     'L'     '''     '`'     '''     'L'
M           'm'     'M'     '>'     0x00    '>'     'M'
N           'n'     'N'     '<'     0x0303  '<'     'N'
O           'o'     'O'     '('     0x00    '('     'O'
P           'p'     'P'     ')'     0x00    ')'     'P'
Q           'q'     'Q'     '*'     0x0300  '*'     'Q'
R           'r'     'R'     '3'     0x20AC  '3'     'R'
S           's'     'S'     '4'     0x00DF  '4'     'S'
T           't'     'T'     '+'     0x00A3  '+'     'T'
U           'u'     'U'     '&'     0x0308  '&'     'U'
V           'v'     'V'     '9'     '^'     '9'     'V'
W           'w'     'W'     '1'     0x00    '1'     'W'
X           'x'     'X'     '7'     0xEF00  '7'     'X'
Y           'y'     'Y'     '!'     0x00A1  '!'     'Y'
Z           'z'     'Z'     '#'     0x00    '#'     'Z'
COMMA       ','     ';'     ';'     '|'     ','     ','
PERIOD      '.'     ':'     ':'     0x2026  '.'     '.'
AT          [email=]'@'[/email]     '0'     '0'     0x2022  '0'     [email=]'@'[/email]
SLASH       '/'     '?'     '?'     '\'     '/'     '/'
SPACE       0x20    0x20    0x9     0x9     0x20    0x20
NEWLINE     0xa     0xa     0xa     0xa     0xa     0xa
# on pc keyboards
TAB         0x9     0x9     0x9     0x9     0x9     0x9
0           '0'     ')'     ')'     ')'     '0'     '0'
1           '1'     '!'     '!'     '!'     '1'     '1'
2           '2'     [email=]'@'[/email]     [email=]'@'[/email]     [email=]'@'[/email]     '2'     '2'
3           '3'     '#'     '#'     '#'     '3'     '3'
4           '4'     '$'     '$'     '$'     '4'     '4'
5           '5'     '%'     '%'     '%'     '5'     '5'
6           '6'     '^'     '^'     '^'     '6'     '6'
7           '7'     '&'     '&'     '&'     '7'     '7'
8           '8'     '*'     '*'     '*'     '8'     '8'
9           '9'     '('     '('     '('     '9'     '9'
GRAVE         '`'     '~'     '`'     '~'     '`'     '`'
MINUS         '-'     '_'     '-'     '_'     '-'     '-'
EQUALS        '='     '+'     '='     '+'     '='     '='
LEFT_BRACKET  '['     '{'     '['     '{'     '['     '['
RIGHT_BRACKET ']'     '}'     ']'     '}'     ']'     ']'
BACKSLASH     '\'     '|'     '\'     '|'     '\'     '\'
SEMICOLON     ';'     ':'     ';'     ':'     ';'     ';'
APOSTROPHE    '''     '"'     '''     '"'     '''     '''
STAR          '*'     '*'     '*'     '*'     '*'     '*'
POUND         '#'     '#'     '#'     '#'     '#'     '#'
PLUS          '+'     '+'     '+'     '+'     '+'     '+'

由于键字符映射文件在DHD中不再是文本文件格式,做修改的话我们需要HexEdit或者UltraEdit这类支持16进制代码的工具。
修改前,我们要先查询 http://www.ascii-code.com/ ,查到$对应的16进制HEX码为24,¥对应的16进制HEX码为A5。
然后用UltraEdit打开qwerty.kcm.bin




2、修改精确电量。教程见 http://bbs.anzhi.com/forum.php?mod=viewthread&tid=4874825


6. 修改音量键开屏。教程见 http://bbs.anzhi.com/thread-4859012-1-1.html


7. 修改搜索键锁屏。教程见

http://bbs.anzhi.com/forum.php?mod=viewthread&tid=4857191


8. 修改字体。安装字体管家 豌豆荚有