Skip to content

About

轻量安卓输入法(IME):26 键全拼 / 双拼(7 套)、剪贴板历史、分类词库;核心功能全部本机运行,无服务端。

Resources

Stars

17 stars

Watchers

0 watching

Forks

Repository files navigation

精灵输入法

轻量安卓输入法(IME):26 键全拼 / 双拼(7 套)、剪贴板历史、分类词库。核心功能全部本机运行,无服务端; APK 约 3.2MB,不含离线语音数据。

English | 中文

语音听写为可选、不开箱即用:识别在服务端完成,需自行在家用 NAS 上部署 CapsWriter Offline(Docker),Android 端经 WebSocket 上传音频。 没有自建服务端就用不了。拼音键盘 / 剪贴板 / 词库与语音无关,无需服务端。

功能

完整清单见 功能总览.md(本节只列亮点,不是全量)。

拼音键盘(26 键)

  • 全拼 / 双拼 / 英文;双拼 7 套(自然码、小鹤、搜狗、微软、紫光、智能ABC、加加),键面自动提示韵母与 zh/ch/sh(设置页「键盘内显韵母」可关,关闭后键面只显示字母);设置页「拼音输入方案」切换,选中即全局生效
  • 字符集:默认收录常用字 5,613 个(囧 / 淼 / 喆 / 昇 这类人名地名用字直接打得出);设置页「加更多生僻字」进页可按档放开二级(837 字)与三级(2,923 字)生僻字,档 3 需先开档 2,勾选即时生效
  • 「只使用繁体字」(设置页):候选按简繁对照表替换为繁体上屏(如 爱 → 愛、碍 → 礙),开关即时生效;学习记录仍按简体保存,繁简两种模式共享
  • 不完整拼音补全(ni m / nim →「你们」)、词库约束分词(xuni → xu+ni 虚拟)
  • 候选栏:拼音条横排(显示按下的字母,双拼可按设置页「双拼候选全音」切成声韵全拼,如 vsgo → zhongguo),候选在其下;可选单行 / 双行,双行时拼音条夹在两排候选之间;候选栏追加候选词(默认关);中英一键切换
  • 圆角 / 间隙 / 键高 / 候选字号 / 候选字距 / 透明度在设置页「键盘外观」调(048dp / 016dp / 4090dp / 1442sp / 555dp / 0100%),拖动即时生效;改候选字号时整个候选栏跟着长高变矮
  • 键盘皮肤:32 套(原黑 / 原白 + 30 套配色),亮色 16 / 暗色 16,纯代码绘制零位图,与上面三项独立
  • 界面明暗切换:跟随系统 / 亮色 / 暗色 / 定时;亮色与暗色各选定一套皮肤,切换时键盘皮肤随之切换
  • 模糊音容错(默认关):11 组口音等价类(zh⇄z、n⇄l、en⇄eng 等)按需勾选,命中不到时补充该音的其他读法(精确候选一个不动、不被替换)
  • 删除键:单击删 1 字、按住连删、双击后按住连输入框文字一起清;候选栏 ✕ 一键清空当前输入
  • 悬浮键盘(默认关):设置页「悬浮键盘」逐应用勾选,只有这些应用弹出键盘时用可拖动浮层;顶部把手拖动移位、长按在 62% / 78% / 92% 三档换大小,四角可各自拉伸,右侧「回到底部」一键退回;竖横各存一套位置与大小,悬浮时宿主画面不再被顶起

剪贴板历史(输入法内嵌面板)

  • 复制自动保存(文本与图片),AES-256-GCM 加密存本机私有库,仅本输入法可读;图片原图与缩略图同样加密落盘
  • 分类:全部 / 网址 / 数字 / 图片 / 收藏;动态序号、点击即粘贴、长按收藏或删除、清空需二次确认且不动收藏
  • 图片:复制即入库(超单张上限不入库);「图片」分类网格浏览缩略图(收藏的排最前),点击经 commitContent 插入支持收图的输入框(不支持时退回剪贴板并替你触发一次粘贴);长按出「转移到图库目录 / 收藏 / 删除」,预览框里另有复制与保存到相册(Android 10+);「全部」列表默认只给图片留序号占位,可在「剪贴板自定义」页改为一并显示,也可让收藏的原图明文移到图库绑定目录;图片不进任何备份,换机前用「图片 → 导出全部图片」存到相册;图片与文本容量各自独立
  • 顶部搜索面板:关键词实时检索文本(图片不进搜索),点击直接上屏
  • 容量自定义(设置页「剪贴板自定义」):默认锁定只读,开「解锁参数」(会话级、不落盘)才可调,改动进草稿、点「保存」才落盘(保存 / 重置都自动回锁,未保存离开二次确认);总开关与图片开关(都不进备份)+ 10 个参数 —— 历史数量 / 体积(默认 500 条 / 100MB)、收藏条数与体积软上限、单条上限(256KB)、面板单页条数(50)、搜索结果上限(200)、图片张数 / 体积 / 单张上限(300 张 / 200MB / 20MB);各自统计、各自淘汰,完整取值范围见仓库「功能总览.md」;底部入口「剪贴板历史管理」可搜索 / 分类筛选 / 多选批量删除 / 分类删除 / 按行导入 txt(每行一条,重复自动跳过)

键盘触感反馈(设置页「敲击音效反馈」)

  • 敲击音效:16 个真实键盘录音,按 6 组按键(文字输入 / 数字 / 符号标点 / 删除清空 / 确认键 / 功能切换)各选一种音色;独立音量 0~100%(默认 50%);「静音时仍播放」可在页内单独开关;每组可试听
  • 按键震动:关闭 / 弱 / 中 / 强 四档(默认 中);删除 / 清空用双段触感(静音下也是唯一辨识线索)

词库与学习

  • 分类词库(设置页「补充短语词库」):内置 40 万条,另提供三个下载包 —— 2级词库 +90万(建议下载)/ 3级词库 +70万 / 4级词库 +21万;首次构建索引时在空闲后台加载,之后启动即用,下载后自动重启输入法
  • 自定义词库(同页两个入口,共用同一份文本):导入 .txt 选自己写好的 .txt;快捷补充 打开一页直接编辑,保存即生效。每行「词 拼音」(如 黄霄雲 huang xiao yun)—— 分隔符随你怎么打:几个空格、全角空格、NBSP、TAB 都认,导入 / 保存后自动整理成标准格式(词 空格 拼音);上限 8M 字符(8,388,608)/ 5 万条;转成可选词库包 custom_user.txt.xz 与内置词库合并出候选,重启输入法生效。词组不受生僻字表限制(繁体、生僻字照打),单字仍按「加更多生僻字」的档位开关放行;随配置备份一起导出导入(含源文本),词库页可重新编辑或删除
  • 用户词频学习:记住点过的候选并排到前面;数据只留本机,可关
  • 选择台账 / 用户词库(默认关):把 26 键真正上屏的候选按「词 + 读音」逐行追加到本机文件,作为自己的定制词库原料;只增不删,关闭即删文件。开启需在说明弹框里手输大写 OK。可在设置页「生成用户词库」查看频次、导出 Rime / TSV / 纯词表并导入。该文件不随配置备份迁移

在线翻译(可选,自带 Key)

  • 一键翻译:选中文字就翻选中的那一段、译文原地替换;没选中则取光标前后(范围可选),译文追加在原文下一行。候选栏功能面板第 6 键(关掉即不出现)
  • AI 文本动作:长按翻译键展开 8 个动作(润色 / 正式 / 口语 / 精简 / 扩写 / 提炼 / 纠错 / 回复)+ 末尾红色「返回」,点动作即执行并收回;仅 OpenAI 兼容服务方支持(其余服务方长按会有一次提示)
  • 六家服务方:阿里云 / Azure / 百度 / 百度大模型 / DeepL / OpenAI 兼容;默认服务方,以及「翻译原文范围」(光标前本行 / 所在整行 / 光标前全部 / 编辑框全部)按服务方独立配置
  • 单次字节上限按服务方独立可填,出厂值取各家官方限制;原文超出时从前面开始取、舍弃后面的
  • 自动互译(当前对称支持「中文⇄English」):请求前按字形判定源脚本,仅当判定源等于固定目标时把译向翻到对侧;混写 / emoji / 数字 / URL 判定不出时保持原目标
  • 提示词模板(OpenAI 兼容):「恢复默认提示词」按钮弹出四套预设 —— 默认翻译 / 闲聊社交 / 工作书面 / 编程代码,选中即回填 system / user 两框(自定义提示词只作用于「翻译」;润色 / 提炼等动作使用内置模板)
  • 凭据 Keystore 加密落盘;凭据页防截屏;复制过的 Key 会从剪贴板历史里清掉

配置备份(设置页)

  • 全部设置项 + 用户词频(可选剪贴板历史、已下载词库)导出为单个 .jinn 加密包
  • AES-256-GCM + 中文汉字密码(本机不存);导入可选「覆盖还原」或「仅并入数据」;导入前可预览备份时间 / 来源设备 / 各节条数

语音听写(可选,需自建服务端)

  • 长按麦克风:按住说话松手识别,上滑取消;短按:连续录音,再点结束(3 分钟兜底)
  • 本地 VAD 静音检测,减少无效上传

架构

【本机 · 无需服务端】拼音键盘 / 剪贴板面板 / 词库引擎 ← 输入法服务 JinnIme
【可选 · 需自建服务端】麦克风 → MicRecorder(16kHz PCM16) → AsrClient(WebSocket)
                              → NAS 上的 CapsWriter Offline → 识别文本(整段累积、整体覆盖)
模块 职责
JinnIme 输入法服务:双模式、手势、结果回显、剪贴板粘贴
PinyinEngine / FuzzyPinyin 引擎:词库加载、候选查询、双拼、补全、分词 / 模糊音等价类(纯函数)
PinyinKeyboardView 26 键键盘 + 候选栏 + 功能面板
ClipboardPanelView / SearchPanelView 剪贴板面板 / 顶部搜索面板
ClipboardDb 剪贴板库(SQLite + AES-256-GCM)
KeyboardLayouts / KeyboardSkin 键盘布局数据 / 皮肤(零位图)
KeyAppearanceActivity / DictManagerActivity / SymbolOrderActivity / FavoriteSymbolsActivity 外观页 / 词库页 / 符号排序页 / 收藏编辑页
ConfigBackup / ConfigBackupManager / ConfigCrypto 备份格式 / 打包解锁导入 / 加解密(JVM 可测)
AsrClient / Diagnostics WebSocket 客户端(仅语音) / 日志与崩溃捕获

语音服务端(可选)

项 值
地址 / 端口 家用 NAS 局域网地址,6016
协议 ws://<host>:6016,子协议 binary
音频 16kHz 单声道 float32 小端裸样本(Base64)
分段 seg_duration=60、seg_overlap=4

通信对齐服务端 core/protocol.py:一次听写 = 若干 is_final=false 音频包 + 一个 data="" 的 is_final=true 收尾包; 服务端返回整段累积文本,客户端整体覆盖显示,不自行拼接。

构建

环境:JDK 17、Android SDK(compileSdk 34 / minSdk 26)、Gradle 8.9(项目内置 wrapper)。

python build_apk.py              # 编译 release → ./com.jinn.inputmethod.apk
python build_apk.py --install    # 编译并安装到设备
python build_apk.py --clean      # clean 后全新编译
./gradlew assembleDebug          # Debug(未签名)
./gradlew assembleRelease        # 无 JINN_KEYSTORE_* 时产出未签名包

签名:仓库不含密钥,禁止把密钥库 / 口令文件放进仓库目录。在仓库外生成后由环境变量注入 (cmd 用 set JINN_KEYSTORE_ROOT=<凭据目录>,PowerShell 用 $env:JINN_KEYSTORE_ROOT="<凭据目录>"), 再运行 python build_apk.py。不设该变量时,脚本按「共享工作区 → %USERPROFILE%\JinnKeyStores」 自动找含本包密钥的目录。也可以绕过脚本直接给 Gradle 传 JINN_KEYSTORE_FILE / JINN_KEYSTORE_PASSWORD / JINN_KEY_ALIAS / JINN_KEY_PASSWORD。

签名顺序不可调换:构建 → 去 META-INF → zipalign -p 4 → apksigner → 校验 (apksigner 不对齐,写反会让 APK 未对齐、设备读资源需先解压)。

词库

内置(app/src/main/assets/,由 tools/dict_builder/build_dicts.py 生成):

  • pinyin_index.bin.xz:短语索引,约 29.9 万键 / 40 万条(按词频从高到低切分),二分查找按需解码
  • pinyin_chars.txt.xz:单字表(9,373 字 / 10,080 条读音,含三档全部)
  • common_chars / tier2_chars / tier3_chars.txt.xz:三档字表(5,613 / 837 / 2,923 字),档 2、档 3 按开关放行
  • simp_trad.txt.xz + simp_trad_words.txt.xz:简繁对照(2,714 对逐字 + 9,139 条词级表),供「只使用繁体字」替换候选(词级优先,如 头发 → 頭髮 而非 頭發;逐字表源 OpenCC STCharacters 繁体优先、人工表只作覆盖;词级表含词级消歧与「往返一致」补收两类条目,同一繁体形下以词频最高的词典词为反查胜者)
  • simplify.txt.xz:繁→简单字映射(2,965 项,源 OpenCC TSCharacters)——把繁体候选折回简体,词频 / 消费区间 / 排序的键都按简体走(缺了它,「頭髮」只折得回「头髮」)
  • pinyin_syllables.txt.xz:合法音节全集(421 个;lue/nue 保留 —— 双拼输出 ue 型,切分与 üe 折返都要用)

可选词库不进 APK,在「分类词库」页按需下载到 filesDir/dicts/(第 2 / 3 / 4 部分, 90 / 70 / 21 万条,2026-10-10 重切;下载包首次使用会生成索引缓存,见「存储占用」页)。 构建工具见 tools/dict_builder/。

许可证与致谢

GPL-3.0(见 LICENSE)。内置词库与简繁映射的来源:雾凇拼音、白霜拼音(GPL-3.0), 万象拼音(CC BY 4.0),结巴分词(MIT)—— 因含 GPL-3.0 来源,整体以 GPL-3.0 分发。

rime-ice 雾凇拼音 · rime-wanxiang 万象拼音 · jieba 结巴分词 · CapsWriter Offline · pypinyin

About

轻量安卓输入法(IME):26 键全拼 / 双拼(7 套)、剪贴板历史、分类词库;核心功能全部本机运行,无服务端。

Resources

Stars

17 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages