/dev/input/
,按鍵定義在 Linux kernel/include/linux/input.h
中;有趣的是 Android 系統並沒有直接使用映射後的值,而是對其再進行了一次key mapping。從Linux kernel標準鍵值到 Android 所用的Key mapping則是定義在 Android 文件系統的/system/usr/keylayout
目錄下 (AOSP中的frameworks/base/data/keyboards/目錄下)。Android 標準的鍵值映射表文件為 qwerty.kl
,定義如下:KEY | 键值 ID | 映射值 | Flag |
key | 399 | GRAVE | |
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 | 158 | BACK | WAKE_DROPPED |
key | 230 | SOFT_RIGHT | WAKE |
key | 60 | SOFT_RIGHT | WAKE |
key | 107 | ENDCALL | WAKE_DROPPED |
key | 62 | ENDCALL | WAKE_DROPPED |
key | 229 | MENU | WAKE_DROPPED |
key | 139 | MENU | WAKE_DROPPED |
key | 59 | MENU | WAKE_DROPPED |
key | 127 | SEARCH | WAKE_DROPPED |
key | 217 | SEARCH | WAKE_DROPPED |
key | 228 | POUND | |
key | 227 | STAR | |
key | 231 | CALL | WAKE_DROPPED |
key | 61 | CALL | WAKE_DROPPED |
key | 232 | DPAD_CENTER | WAKE_DROPPED |
key | 108 | DPAD_DOWN | WAKE_DROPPED |
key | 103 | DPAD_UP | WAKE_DROPPED |
key | 102 | HOME | WAKE |
key | 105 | DPAD_LEFT | WAKE_DROPPED |
key | 106 | DPAD_RIGHT | WAKE_DROPPED |
key | 115 | VOLUME_UP | WAKE |
key | 114 | VOLUME_DOWN | WAKE |
key | 116 | POWER | WAKE |
key | 212 | CAMERA | |
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 | 43 | BACKSLASH | |
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 | 14 | DEL | |
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 | 28 | ENTER | |
key | 56 | ALT_LEFT | |
key | 100 | ALT_RIGHT | |
key | 42 | SHIFT_LEFT | |
key | 54 | SHIFT_RIGHT | |
key | 15 | TAB | |
key | 57 | SPACE | |
key | 150 | EXPLORER | |
key | 155 | ENVELOPE | |
key | 12 | MINUS | |
key | 13 | EQUALS | |
key | 13 | EQUALS | |
key | 216 | AT | |
key | 1 | BACK | WAKE_DROPPED |
key | 68 | MENU | WAKE_DROPPED |
大致上,這是依照標準QWERTY電腦鍵盤,從左到右、從上到下的順序排列的。
稍微解釋一下每個欄位的意義:
*映射值:
即相應鍵值的英文名稱,請參考具體含義搜索一下便知。注意需要全部使用大寫。
*Flag:
SHIFT:按下時,自動加上 SHIFT 鍵值。
ALT:按下時,自動加上 ALT 鍵值。
CAPS:按下時,自動帶上 CAPS 大寫。
WAKE:按下時,當設備進入睡眠的時候,按下這個鍵將喚醒,並且發送消息給Application。
WAKE_DROPPED:按下時,且設備正處於睡眠,設備被喚醒,但是不發送消息給Application。
當Linux Kernel收到對應的按鍵時,會寫keycode到輸入事件設備
/dev/input/
中。而Android就會按照這qwerty.kl所定義,將keycode轉為Android中所使用的key value;例如:keycode: 212就會變成CAMERA。如果想要hack將某個key的功能換掉也很簡單。只要打開
qwerty.kl
,將其中對應的 Key 的 ID 後面的鍵值改為需要的鍵值即可。再用 root explorer 等具有系統文件操作功能的文件管理器把qwerty.kl
移動到根目錄的/system/usr/keylayout/
裡覆蓋相同名稱的檔案即可。(電腦端建議使用 notepad++ 等文本編輯器打開qwerty.kl
文件)。例如想要讓VOL_UP變成CAMERA功能,就可以將
key 115 VOLUME_UP WAKE
修改為
key 115 CAMERA WAKE_DROPPED
修改完畢後將該文件回拷到手機上時最好先放到手機內非
/sdcard/
的目錄,並且修改好相應的權限(CHMOD 644以上)之後再copy到/system/usr/keylayout/
,然後Reboot就可以啦。提醒:為了安全起見,在操作之前最好對手機進行 nandroid 備份喔
沒有留言:
張貼留言