事件的传入是从EventHub开始的,EventHub是事件的抽象结构,维护着系统设备的运行情况,设备类型包括Keyboard、TouchScreen、TraceBall。它在系统启动的时候会通过open_device方法将系统提供的输入设备都增加到这个抽象结构中,并维护一个所有输入设备的文件描述符,如果输入设备是键盘的话还会读取/system/usr/keylayout/目录下对应键盘设备的映射文件,另外getEvent方法是对EventHub中的设备文件描述符使用poll操作等侍驱动层事件的发生,如果发生的事件是键盘事件,则调用Map函数按照映射文件转换成相应的键值并将扫描码和键码返回给KeyInputQueue,详见Android中Key Event流程
input调试工具:getevent 源代码:system/core/toolbox/getevent.c
框架:
详细结构:
源代码路径:frameworks/base/libs/ui/EventHub.cpp
参考:
Android 4.0 事件输入(Event Input)系统
Android 【真机】与【模拟器】触摸屏事件的模拟差异分析
应用层的代码分析:
Android FrameWork——Touch事件派发过程详解