市面上的输入法虽然功能丰富,但往往夹杂大量花哨设计,且存在隐私收集问题,难以满足程序员对简洁、高效和可控性的需求。作为开发者,我有明确的词库修改需求和协议抽象偏好,而现有输入法几乎不支持用户对输入逻辑进行深度定制。为此,我开发了该项目——一款面向程序员的 Android 输入法,基于 Rime 引擎构建,提供了更大的自由度,以及更少的无关功能。
- 拼音输入与分词支持:支持基础拼音输入,可手动添加分隔符进行分词
- 用户词库管理:支持搜索、删除、排序(按名称升序),并优化了词库加载与编辑逻辑
- 剪贴板功能:具备剪贴板编辑器,支持删除单条记录、清空剪贴板,并可设置条目上限
- UI 使用 Jetpack Compose 构建:界面响应式、主题统一,视觉一致性强
- 键盘增强功能:支持三态 Shift 键、全键盘触摸振动、自动翻页提示、实体键盘适配
- 光标控制面板:支持选择、复制、剪切、粘贴、移动光标等高级操作,仅在有选中文本时启用
- 二级功能按键:支持快速输入常用符号(如括号、引号、运算符等),可通过配置文件自定义绑定行为
1. 这个项目是我一个人独立完成的,一年前开始开发的,至今仍在维护。我用 Kotlin 编程语言和 Jetpack Compose 来构建界面,整个输入法的操作界面都是我自己设计和实现的。为了支持拼音输入,我还集成了 Rime 输入引擎,并通JNI让它能在 Android 上正常运行。
2. 项目亮点:
使用 Jetpack Compose 构建输入法界面:在 Android 输入法框架中使用 Compose 是非常少见的做法,不仅提升了界面响应速度和一致性,也让 UI 更易维护
支持二级功能按键自定义:用户可以通过配置文件自由定义符号输入、快捷操作等行为,实现高度个性化的输入体验
突破 Rime 限制,实现词库编辑功能:通过修改 Rime 源码,绕过原有限制,实现了用户词库的搜索、删除与排序功能,满足了高频用户的词条管理需求
3. 项目难点
将 Compose 应用于输入法服务:输入法属于系统级组件,Compose 的生命周期与输入法框架不完全兼容,需要额外处理焦点、状态恢复等问题
模块间状态同步复杂:前端界面、底层引擎、设置页面与输入法服务之间需要实时同步状态,我使用了 EventBus 来实现跨模块通信,确保数据一致性
性能优化过程曲折:项目初期存在明显卡顿,我尝试减少过渡绘制但效果有限。最终发现是 librime 的日志功能导致性能瓶颈,关闭日志后才彻底解决卡顿问题