Skip to content

Repository files navigation

Feelime 输入法

Feelime is an open-source, fully offline Android keyboard with modern visuals and built-in voice input. Everything — keystrokes, candidates, speech recognition — stays on your device.

Open · completely open source and free; the keyboard UI is plain HTML/CSS/JS that you can customize without repacking the APK. Modern · a clean, modern interface plus streaming bilingual speech recognition. Private · fully offline, no network access, nothing leaves the device.

English details: README.en.md

Feelime 是一个 Android 离线输入法:键盘区域由本地 HTML/CSS/JavaScript 渲染,通过受控 JS Bridge 调用 Android InputConnection;语音识别采用 双通道——流式 Zipformer 实时出临时文本,停顿段由 Paraformer 整句纠错, 最后恢复英文大小写、缩写与标点。全部计算发生在设备本地。

特性

  • 完全离线:语音识别(sherpa-onnx)与中文引擎(librime)都在本机 运行,音频与文本不出设备;WebView 关闭网络与文件访问,CSP 禁外链
  • 现代界面:统一的色彩体系与交互语言,自动适配亮/暗主题(详见 docs/design/appearance.md
  • 语音输入:中英混合流式识别 + 整句纠错 + 本地标点恢复,长按空格 即说即上
  • 中文:全拼 / 双拼(自然码)、简体、连续造词、独立用户词库、 统一候选池(候选条与展开区共用全量候选,拖动自动加载)
  • 多语言:英语、法语、俄语、日语罗马字,离线词典候选
  • 键盘界面可定制:键盘就是 app/src/main/assets/keyboard/ 下的 HTML/CSS/JS——改几个颜色或整层重排,都无需重新打包 APK(debug 构建 支持免签名热更包与本地推送,见下文「键盘热更新」)
  • 符号键定制:定制键位表支持文本 / 特殊键 / 组合键(如 Vim 宏)混排
  • 控制键层:Ctrl/Alt/Win/Fn 粘滞键与组合键,可驱动终端与远程桌面

构建与安装

标准 Android 开发环境即可(Linux/macOS,需要 ANDROID_HOME 指向 Android SDK):

./scripts/setup-assets.sh     # 首次:下载 sherpa-onnx AAR 与模型(SHA-256 校验)
ANDROID_HOME=… ./gradlew :app:assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk

词典引擎数据(中文/西文/日语,约 52MB)随仓库分发,构建时 checkEngineArtifacts 逐文件核对 SHA-256;再生成用 pinned 管线,见 AGENTS.md「词典引擎数据」

完整包内置语音模型;-PfeelimeModels=thin 可构建不含模型的精简包 (首次使用语音前在设置页下载)。启用方式:授予麦克风权限、在系统输入法 设置里启用 Feelime,然后切换输入法选择 Feelime。

键盘热更新

键盘源文件在 app/src/main/assets/keyboard/。这就是自定义键盘外观的 入口:改 HTML/CSS/JS 后无需重打 APK——

./scripts/push-keyboard.sh    # 只推 HTML/CSS/JS 到设备,秒级生效

脚本写入应用私有目录并广播更新,运行中的 Feelime 免重启重载页面。 设置页可随时「恢复 APK 内置键盘」;键盘包安装走签名/能力校验与原子 激活(详见 docs/design/keyboard.md §8)。

文档

文档 内容
AGENTS.md 工程约定、常用命令、验证门禁(AI 协作手册)
docs/design/keyboard.md 产品与交互语义权威文档(代码注释的 §N 出处)
docs/design/appearance.md 外观方案与新增元素检查单
docs/product/requirements.md 需求清单与已知边界
docs/testing/verification.md 验证方法与门禁

开发与验证

本地三层门禁(无需设备,秒级):

node scripts/verify/css_lint.js
node scripts/verify/mock_bridge_tests.js
ANDROID_HOME=… ./gradlew testDebugUnitTest

设备门禁(FEELIME_ADB_SERIAL 等环境变量注入):

bash scripts/verify/run-all.sh

完整的验证方法、套件清单与平台怪癖见 docs/testing/verification.md

大文件与隐私

sherpa-onnx AAR、ONNX 模型与语音测试音频不提交 Git; scripts/setup-assets.sh 从官方 release 下载并校验 SHA-256:

sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20-mobile
sherpa-onnx-paraformer-zh-small-2024-03-09
sherpa-onnx-punct-ct-transformer-zh-en-vocab272727-2024-04-12-int8

音频不会写入磁盘(内存最多暂存约 24 秒 PCM),所有音频和文本都留在 设备上;剪贴板历史不采集密码框、不进云备份。

许可证

MIT。语音能力来自 sherpa-onnx,中文引擎为 librime;第三方组件的完整清单见 third_party/NOTICE

About

离线优先的 Android 输入法:全拼/双拼、离线语音、常用语与剪贴板,数据不出设备 | Offline-first Android IME (librime · sherpa-onnx)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages