Skip to content

feat(mobile): Android 与鸿蒙共用 Rime 输入法后端 - #1196

Open
aeoform wants to merge 50 commits into
Open-Less:betafrom
aeoform:fix/mobile-rime-harmony
Open

aeoform wants to merge 50 commits into
Open-Less:betafrom
aeoform:fix/mobile-rime-harmony

Conversation

@aeoform

@aeoform aeoform commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

摘要

将 Android 内置拼音从 LitePinyin 切换到 librime 1.17.0,Android 和鸿蒙共用 C ABI 会话后端、离线资源与原生用户词典;新增鸿蒙应用宿主及原生输入法扩展。Linux 现有 Fcitx5 插件继续承担原有职责。

改动

  • 共用 Rime 后端支持编码、退格、候选翻页/展开、选词、空格确认、取消、待提交保持与候选版本检查。普通字段使用原生用户词典调频及分段造词;私密会话既不训练也不读取个人词典。删除旧 Android LitePinyin 算法和内置 TSV,旧备份格式仅保留兼容适配器。
  • 内置固定修订 da1fbe60 的雾凇五张中文词表及拼写规则,补齐笔画反查的八股文字频和上游许可。保留 rime-user/pinyin_simp.userdb,不捆绑 Lua 工具或语法模型。
  • 新增共用 Rust 公共词库更新器:默认每周检查上游公开版本,失败次日再试,可关闭自动更新;鸿蒙支持手动检查。五张词表和许可证锁定同一公开提交,验证版本、编码、表名、结构与大小后发布独立快照,下次引擎初始化才启用。部署失败回退;保留运行和回退版本,个人学习词典保持原位。请求不含按键、拼音或个人词条,词库更新与实时云候选独立。
  • 可选 GoogleCN 云候选默认关闭;开启后仅发送当前拼音。密码、未知/私密字段和 Android 禁止个性化学习的字段禁用。180ms 防抖、单路查询、1.2 秒超时、64 KiB 响应上限;旧回复按输入版本丢弃。保留本地首选及原生索引,云选择通过共同待提交/ack 路径,不直接训练成用户词条。
  • 鸿蒙通过 ArkWeb / ArkTS / Node-API / Rust 接通设置、渠道、安全凭据、风格包、网络检查、麦克风设备/授权/音量、外部浏览器与 GitHub 登录;包含市场 ZIP 下载、渠道测试结果持久化、词库建议处理及普通云备份接线。未实现命令明确报错。
  • 鸿蒙面板提供普通、拇指(分离)、右侧单手及 IME Kit 原生悬浮布局,支持记忆、拖动/缩放、屏幕边界和横竖屏适配。按键填满面板可用宽度,仅保留正常边距;采用紧凑行高,宽屏使用横向矩形按键,标准布局横纵间距均为 7vp;标准与分离布局使用相同行高和高度,避免切换跳动,高度同时受屏幕空间约束。灰底白键、圆润 SVG 工具图标、10vp 圆角及 90ms 按下反馈同时提供深浅色资源。
  • 左上角菜单顶部居中横向显示“常用功能 / 输入方式 / 键盘模式”,替代工具图标栏,左上角固定圆形返回按钮,下方分类选项可滚动;分类采用胶囊圆角;功能选项采用带图标和文字的方形块,顶部分类栏使用较深胶囊底板,下面功能块不加底板,配备深浅色 SVG 图标。原生 Swiper 提供跟手滑动及 220ms 切换动画,点击分类也使用动画,顶部选中块按逐帧分页进度同步移动;更多、候选栏入口与返回按钮共用固定的左侧 38vp 位置;纵向可滚动,分类边界不循环。候选栏左对齐,输入停顿 60ms 后预取至至少 32 个候选,横向到末尾每次再追加约 32 个;展开后采用 2–6 列网格,上下滚动继续加载。通过 librime 候选迭代器只读获取每批最多 32 个候选,不改变当前菜单页、版本或首选词;旧版本范围请求会被拒绝。使用已有原生绝对选词接口,保留之前的候选和排序,云候选不改变原生索引。新拼音回到左端,重复加载、旧输入队列与并发选词均受保护。未组词时,更多与收起之间提供四个固定可编辑快捷槽位,长按或从常用功能进入编辑,配置保存到本机。保留数字/符号页、表情、长按删除、语音入口。中英标点在显示、长按/上滑预览与实际提交时均读取当前语言;符号页保留数字行。上滑采用 22–30vp 距离与方向判断,可滑回取消,单次提交不额外输入字母;结果提示区分确认写入与兼容派发。
  • 鸿蒙属性读取报错或超时后使用私密会话继续中文输入并禁用语音。卓易通缺少回执时,对属性已知且匹配兼容桥接的非密码框,提交、删除及编辑框动作每次只派发一次,随后继续组词;不逐词确认、不自动重发,迟到结果不影响新输入框。只使用输入法接口,不接入无障碍。
  • 菜单按宽度自适应为一行或两行,图标块水平间距增至 24vp:常用功能提供设置、剪贴板、语音润色模式、字体、按键音、定制工具栏、预置常用语、表情和上滑开关。文字剪贴板通过系统粘贴按钮临时授权读取,保存最多 30 条本地记录,提供再次粘贴、复制、固定、删除和清空;密码/未核验字段不收集,不监听或上传系统剪贴板,保存串行化防止迟到写入恢复已清空记录;润色模式接共用后端;字体、声音和上滑选项本地保存,短按键音使用本地资源并跟随媒体音量。设置入口直接打开主应用;输入方式下的“词库与云候选”保留云候选、公共词库更新及系统输入法切换。上滑开关在识别和提交时读取实时存储,移动会取消长按,防止关闭后慢滑仍被长按接管。单手内容最多 420vp、不超过屏幕宽度的 72%,靠右显示并保存模式。按用户本轮范围,9 键、手写、拍照、繁体和英文联想只显示“待接入”禁用入口,不实现新引擎。
  • 鸿蒙录音、PCM、共享 ASR/润色、结果预览与确认提交、历史 WAV 重识别/润色/清理已接线。扩展创建时预热词库,首次资源复制采用异步分段写入,完整打字自检保留在诊断入口。构建缓存与签名材料留在外部目录。

验证

  • 最终鸿蒙完整本地构建、签名和安装通过:TypeScript、Vite、Rust OHOS、ArkTS/CMake、HAP。
  • 鸿蒙真机用户确认浏览器跳转、GitHub 登录、中文候选、删除、三种布局、卓易通连续选词/删除、词库/云候选改善、按键手感,以及中英标点显示/输入和符号页数字行正常。铺满宽度和分类菜单已安装;用户确认降低行高和调整间距后改善;进一步统一标准/分离布局高度,新包已构建并安装;用户认可菜单居中分类,返回按钮固定在最左侧。按反馈将深色底移到顶部分类栏,功能使用图标方块,改用原生动画分页;正常提交不再显示手动恢复按钮,超时和失败仍保留恢复。顶部同步选中块、固定左侧入口及 2vp 阴影已安装;连续候选、多行网格及四个可编辑快捷槽位已安装;用户反馈首批过短后增加首次预取和批量追加,并改为只读迭代候选以保留空格及标点首选,两行菜单和已有功能接线版已安装,按反馈补充文字剪贴板历史、修复上滑开关、设置直达应用和自适应排布,最新控件手感待真机复验。
  • 公共词库:4 项测试(含显式真实上游下载)通过。下载后的独立快照通过真实 librime 部署及 nihao / hongmeng 候选验证;从快照切回内置资源后,本地已学习的测试词排序保持。
  • 宿主回归新增剪贴板去重/固定/容量/恢复/删除/损坏数据、私密字段不收集及上滑开关/慢滑取消检查;连续候选追加、并发去重、旧输入拒绝、云候选混排及跨页绝对选词;真实 librime 验证连续读取额外 64 个候选后,页面、版本、空格及标点确认保持不变,跨范围绝对选词及旧版本拒绝通过;Android 模拟器新增同类原生回归。宿主回归覆盖布局尺寸/边界/方向/持久化(含单手宽度与重开恢复)、标点语言与手势互斥、编辑框确认/恢复/过期任务、私密策略、云候选旧回复及原生索引;资源短写、初始化并发复用、快照加载失败回退和路径限制通过。
  • 原生 Rime 回归覆盖用户词典持久化、分段造词、external 版本拒绝、待提交保持和 ack;未读取或上传本机个人词典。
  • 云候选响应/边界测试及已授权的测试串 nihao 联网检查通过。鸿蒙离线语音管线及真实麦克风设备/授权检查通过。
  • Android arm64 Release APK 与 x86_64 JNI 曾通过构建;模拟器覆盖真实词库、控制器、学习与造词。公共词库下载在这些确定性测试中关闭,按用户要求不安装 Android 实机。
  • 最终提交 1569a643 的完整 CI:https://github.com/Open-Less/openless/actions/runs/39125013927 (进行中,完成后更新)。

边界

  • 本机当前 Rime/雾凇还启用约 381 MB 的万象 LTS 语法模型,移动端尚未集成 octagram/模型;公共词库更新不等于相同的长句语法排序。完整 Lua 方案、更多方案切换及旧 LitePinyin 个人词条迁移未完成。
  • 公共词库检查在使用应用时调度,不申请系统后台唤醒权限;首次安装或更新后仍可能需要 Rime 编译词库。实时云候选依赖其服务可用性,失败继续使用离线候选。
  • 卓易通兼容派发无法提供正常原生编辑框的宿主确认保证。平板尚未配置 ASR 渠道,真实联网识别仍待配置后验收;主应用内听写、更多远程服务与端到端加密同步不在已完成清单中。

代码与构建说明:openless-all/app/mobile-ime/README.md、openless-all/app/harmony/README.md、docs/mobile-ime-engine.md。

@aeoform
aeoform marked this pull request as ready for review October 14, 2026 16:10
aeoform and others added 28 commits October 15, 2026 00:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant