Skip to content

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

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

aeoform wants to merge 33 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 插件保持原有职责,不在移动端引入 Fcitx。

修复 / 新增 / 改进

  • 共用引擎支持编码、退格、分页/展开候选、选词、空格确认、取消、待提交文字和候选版本检查。普通输入使用原生用户词典调频及分段造词;私密会话既不读取也不训练个人词典。旧 Android LitePinyin 算法与内置 TSV 已删除,旧备份格式只保留兼容适配器。
  • 固定雾凇 da1fbe60 的中文字表、基础/扩展/腾讯/杂项词库及拼写规则,接到原生 Rime 处理链;补齐笔画反查依赖的八股文字频与上游许可。资源目录单独版本化,保留已有 rime-user/pinyin_simp.userdb。不打包雾凇 Lua 工具或语法模型。
  • 两端通过共用 Rust 模块接 GoogleCN 云候选,来源协议与本机 Fcitx 默认一致。默认关闭,键盘工具/设置注明来源与发送范围;用户开启后只发送当前拼音串,密码、未知及 Android 禁止个性化学习字段禁用。180 毫秒防抖、单路查询、1.2 秒网络超时及 64 KiB 响应限制,网络失败不阻塞离线候选。
  • 云候选去重后补在本地首选之后,本地选择仍映射到原生索引。云选择携带候选版本,走共同待提交/ack 路径;换框、继续输入及关闭开关后丢弃旧回复,不自动重发。云候选不直接训练为 Rime 用户词条。
  • 鸿蒙通过 ArkWeb / ArkTS / Node-API / Rust 接通设置、渠道、安全凭据、风格包、网络检查、麦克风设备/授权/音量、外部浏览器与 GitHub 登录;包含市场 ZIP 下载、渠道测试结果持久化、词库建议处理及普通云备份接线。未实现命令明确报错。
  • 鸿蒙原生面板提供标准、分离、IME Kit 原生悬浮三种布局,包含候选展开/翻页、数字/符号、长按删除、中英标点、表情与语音预览。布局记忆、拖动/缩放、屏幕边界与重复尺寸通知均处理;工具页可滚动,云开关在紧凑面板中仍可访问。只使用输入法接口,不接入无障碍。新增按键右上角符号提示、长按/上滑预览及松开提交;上滑采用 22–30vp 距离与方向判断,滑回取消,避免同时输入原字母。结果提示区分确认写入与兼容派发。
  • 鸿蒙属性接口报错或超时后使用私密会话继续中文输入并禁用语音。卓易通缺失回执时,对属性已知且匹配兼容桥接的非密码框,提交、删除及编辑框动作每次只发送一次,随后继续组词;不要求逐词确认、不自动重发,迟到结果不影响新输入框。此处 Rime ack 表示已交给系统接口,不能证明宿主确认落字。
  • 鸿蒙输入法录音、PCM、共享 ASR/润色、结果预览和确认提交已接线;历史 WAV、重识别、重新润色与音频清理通过共享服务。缓存与依赖构建集中到可配置目录,签名材料不入库。

验证

  • 鸿蒙完整本地构建、签名和安装通过:TypeScript、Vite、Rust OHOS、ArkTS/CMake、HAP。

  • 鸿蒙真机:用户确认浏览器跳转、GitHub 登录、中文候选、删除、三种布局,以及卓易通连续选词和连续删除可用。用户反馈新词库与云候选“好多了”。新词库的真实候选/退格/选词/空格/取消/过期候选自检通过,首次部署约二十秒,之后复用缓存。

  • 独立原生新词库检查:nihao 包含“你好”、hongmeng 包含“鸿蒙”;跨会话学习调频、external 版本拒绝、待提交保持和 ack 通过。没有读取本机个人词典。

  • 云协议参数/响应边界及显式联网检查通过:仅使用测试串 nihao,返回“你好”。宿主回归覆盖默认关闭、隐私限制、单路查询、过期回复、关闭开关、云插入后的本地索引与云提交。

  • 鸿蒙离线语音管线检查覆盖 PCM、预览、取消、过期结果、历史重识别/润色/删除;已完成真实麦克风设备及授权检查。

  • Android arm64 Release 与 x86_64 JNI 曾通过构建,CI 模拟器覆盖真实词库、控制器、学习持久化及造词。按用户要求不做 Android 实机安装测试。

  • 标点手势宿主回归通过:单次提交、竞争取消、误触距离/方向、换框/中英切换、分离布局及结果提示;用户确认调低上滑灵敏度、去掉箭头后手感改善;随后按反馈调整标准键盘宽度/间距、字母居中、分离行对齐、底色、功能键及轻微底边阴影,最后一轮样式待用户复验,标准布局限制最大宽度 760vp、键间距 6vp,浅灰面板/白色字母键/灰色功能键与轻微底边阴影均包含深浅色资源。

  • 最新提交 f80b1085 的完整 CI:https://github.com/Open-Less/openless/actions/runs/39039298694 (7 项检查全部成功;Android 模拟器 19 项测试通过)。上一轮输入队列测试在首次词库部署后超时;测试现将冷部署与队列的 30 秒期限分开,保持队列断言。启动测试的 Windows 换行符兼容问题已修复并加入回归检查。

  • 鸿蒙启动:扩展创建时预热词库,资源复制改为异步分段写入;展开键盘不再等待完整打字自检。初始化并发复用、短写、缓冲区边界及失败重试检查通过,完整构建/签名/安装通过。首次安装或资源升级仍需原生词库编译,未宣称消除冷启动耗时。

边界与待验收

  • 用户已确认词库/云候选改善;云服务不可用时继续离线输入。云候选未直接写入本地用户词典,语法模型、完整 Lua 方案、更多方案切换与旧 LitePinyin 个人数据迁移未完成。
  • 平板尚未配置 ASR 渠道,真实联网语音识别仍待配置后验收;更多远程服务、主应用内听写及端到端加密同步不在已完成清单中。
  • IPC 覆盖清单含桌面接口,不能用静态覆盖比例代表移动端全部完工。卓易通缺失回执时也不能提供与正常原生输入框相同的成功确认保证。

代码与构建说明: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