1. 项目背景与需求解析
最近在调试AOSP 14系统时,发现默认输入法的轨迹功能(Trace)会带来一些性能损耗和误触问题。这个看似小的功能实际上影响着整个系统的输入体验,特别是在定制ROM开发场景下。轨迹功能允许用户在键盘上滑动输入,虽然提升了输入速度,但在某些场景下反而会成为负担。
我在三款不同硬件配置的设备上测试发现,低端设备开启轨迹功能后,输入延迟会增加15-20ms。更麻烦的是,在游戏场景中经常出现误触轨迹识别的情况。比如玩《原神》时快速切换技能,系统会错误地将快速按键识别为滑动输入。
2. 技术实现方案选择
2.1 修改输入法配置文件的方案
最直接的方案是修改InputMethodService的配置文件。AOSP 14中默认输入法的配置位于:
code复制frameworks/base/core/res/res/values/config.xml
关键配置项是:
xml复制<bool name="config_enable_trace">true</bool>
将其改为false理论上可以禁用轨迹功能。但实测发现这个方法存在两个问题:
- 需要重新编译整个framework-res模块
- 某些第三方输入法会忽略这个全局配置
2.2 通过ADB命令动态禁用
更灵活的方案是使用ADB命令:
bash复制adb shell settings put secure input_method_trace_enabled 0
这个方法的优势在于:
- 即时生效,无需重启
- 可以针对特定用户进行设置
- 不影响系统镜像的完整性
但缺点也很明显 - 设备重启后设置会失效。对于需要持久化配置的生产环境不太适用。
2.3 修改InputMethodManagerService
最终我选择了修改IMS服务的方案,这是最彻底的解决方法。关键修改点在:
code复制frameworks/base/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
需要重写以下方法:
java复制private boolean shouldEnableTrace() {
