键盘布局映射文件通常放在/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 WAKE_DROPPED
文件格式:
键映射文件通常以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
key 139
key 158
key 217
key 116
key 114
key 115
现在我们就来修改一下,让音量+键也能像电源键那样唤醒屏幕,修改后的内容如下:
key 102
key 139
key 158
key 217
key 116
key 114
key 115
嗯,这是网上的很流行的做法。下面说说个人实际做法。
首先要从 qwerty.kl 这个文件说起。 .kl就是 keylayout 的缩写,也就是键盘布局文件,而
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.
#
#
key 158
BACK
WAKE_DROPPED
key 139
MENU
WAKE_DROPPED
key 102
HOME
WAKE_DROPPED
key 115
VOLUME_UP WAKE
key 114
VOLUME_DOWN
WAKE
key 215
FOCUS
key 212
CAMERA
key 107
POWER
WAKE_DROPPED
可以看到,里面对Android手机的按键进行了一对一的功能映射,类似于函数的映射。
而里面我们要关注的内容只有这几个
key 115
VOLUME_UP WAKE
key 114
VOLUME_DOWN
WAKE
WAKE:当按下,当设备进入睡眠的时候,按下这个键将唤醒,而且发送消息给应用层。
WAKE_DROPPED:当按下,且设备正处于睡眠,设备被唤醒,但是不发送消息给应用层。
WAKE_DROPPED:当按下,且设备正处于睡眠,设备被唤醒,但是不发送消息给应用层。
但是,前提是手机里面没有用户或者第三方定义的 .kl文件,系统才会默认读取qwerty.kl文件。
例如HTC手机里面的按键映射文件为 spade-keypad-v0.kl,而我的索爱里面有两个= =!分别是:robyn_keypad.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.
#
#
key 158
BACK
WAKE_DROPPED
key 139
MENU
WAKE_DROPPED
key 102
HOME
WAKE_DROPPED
key 115
VOLUME_UP
WAKE
key 114
VOLUME_DOWN
WAKE
key 215
FOCUS
key 212
CAMERA
key 107
POWER
WAKE_DROPPED
key 217
SEARCH
WAKE_DROPPED
key 116
POWER
WAKE_DROPPED
【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.
#
#
key 158
BACK
WAKE_DROPPED
key 139
MENU
WAKE_DROPPED
key 102
HOME
WAKE_DROPPED
key 115
VOLUME_UP
WAKE
key 114
VOLUME_DOWN
WAKE
key 215
FOCUS
key 212
CAMERA
key 107
POWER
WAKE_DROPPED
key 217
SEARCH
WAKE_DROPPED
key 116
POWER
WAKE_DROPPED
可以看到,这两个文件的内容基本一样,作为主银我也不知道这两个究竟是调用哪一个。所以干脆三个一起修改,三个都将 key 115
VOLUME_UP
WAKE 修改为
key 115 POWER
WAKE_DROPPED
【强调一下,先将 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
下面就讲讲键字符映射文件的修改。
键字符映射位于:/system/usr/keychars下
比如对于一个特定的设备xxx,设置android.keychar.xxx系统属性,用全路径表示去描述所需的键字符映射。如果你没有描述任何一个键字符映射,系统将默认使用/system/usr/keychar/qwerty.kcm.bin
文件格式:
键字符映射文件以二进制减少加载时间的形式存储于设备中,键字符映射文件有如下特征:
注释:以#开始为注释
空行:所有的空行被忽略
列定义:当一个事件来临的时候按下组合键。这个事通常是MODIFIER_SHIFT,MODIFIER_CTRL,MODIFIER_ALT的组合。
O
S
C
L
A
键值定义:键值定义遵循如下规则:
键 扫描码 字符[....]
扫描码和字符通常是一个十进制的值或者是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
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
COMMA
PERIOD
AT
SLASH
SPACE
NEWLINE
# on pc keyboards
TAB
0
1
2
3
4
5
6
7
8
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
7. 修改搜索键锁屏。教程见 http://bbs.anzhi.com/forum.php?mod=viewthread&tid=4857191
8. 修改字体。安装字体管家 豌豆荚有