本文主要总结一下Android平台的改键机制,从三个层次 驱动 键盘布局文件 InputReader
所涉及的类:
class EventHub;
struct Device;
class KeyMap;
KeylayoutMap;
class InputReader;
所涉及的文件:
frameworks \
EventHub.h;
EventHub.cpp;
KeyBoard.h;
KeyBoard.cpp;
KeyLayoutMap.h
KeyLayoutMap.cpp
KeycodeLabel.h
InputReader.cpp
kernel \
具体的驱动文件
涉及流程:
从EventHub入手,EventHub::openDeviceLocked-> EventHub::loadKeyMapLocked -> KeyMap::load -> KeyMap::loadKeyLayout -> KeyLayoutMap::load -> KeyLayoutMap::Parser::parse() -> KeyLayoutMap::Parser::parseKey() -> getKeyCodeByLabel -> lookupValueByLabel (KeyCodeLabels.h)
实施改键的关键位置
1.KeyLayoutMap::load 此处加载 (驱动名.kl) 文件,从而加载键盘布局,如设备不提供键盘布局文件,则默认加载usr/keylayout/qwerty.kl
根据键盘布局文件提供的scanCode和关