Rime 系安卓输入法调研(2026-09)
调研对象:语燕输入法安全审查 + libSogouShell.so 来源鉴定 + Rime 系安卓输入法键盘布局(含双字母布局能力)。全部结论基于实际克隆源码验证(本地克隆 trime / fcitx5-android / yuyansdk)。
一、语燕输入法(YuyanIme)安全审查
项目概况:基于 Rime 定制的安卓输入法,Kotlin,3.6k★,BSD-3-Clause。核心代码在 yuyansdk submodule(238 个 Kotlin 文件 / 26,089 行,commit d5609cc)。支持九宫格、全拼、双拼(7 方案)、手写、笔画、火星文等。
总体结论:隐私安全第一梯队,代码干净,可放心使用——README 声称的"最小权限、完全离线"经代码层验证属实。
| 检查项 | 结果 | 证据 |
|---|---|---|
| 权限声明 | 仅 VIBRATE + BIND_INPUT_METHOD | 两个 Manifest 全文核对 |
| 网络能力 | 无 INTERNET 权限 | 技术上无上传能力 |
| 网络代码 | 零网络调用 | 无 okhttp/retrofit/HttpURLConnection/Socket |
| 依赖 | 纯 AndroidX + Room | 零统计/广告/上传 SDK |
| 发布版构建 | offline flavor | CI assembleOffline |
| 剪贴板 | 默认开启监听,本地存 50 条用于联想 | ClipboardHelper.kt 仅写 Room 本地库,可关闭 |
| 数据存储 | 全在 app 私有目录 | getExternalFilesDir(rime/hw/theme) |
组件安全:ImeService exported=true 但有 BIND_INPUT_METHOD 系统签名权限保护(标准做法);FileProvider 不导出;无 receiver;无 WebView/动态加载/命令执行。
代码质量:结构清晰(Rime.kt JNI 封装 + ImeService 标准 IME 生命周期);TODO 仅 1 处、空 catch 仅 1 处、零硬编码密钥;97 个 Kotlin object 单例略多(架构风格);签名密钥走 GitHub Actions secrets。
注意点:①手写引擎为闭源商业库(见下节)②维护放缓(最新 release 2026-05-30,428 open issues 积压)③剪贴板监听默认开启(本地联想功能,介意可关闭)。
二、libSogouShell.so 手写引擎来源鉴定
结论:公开技术圈无此库的风评——Sourcegraph 全库搜索唯一引用 = gurecn/yuyansdk(语燕自身),零第三方项目使用、零技术讨论。
二进制指纹鉴定出完整来源链(四件套结构):
| 库 | 指纹 | 身份 |
|---|---|---|
| libSogouShell.so (7.6MB) | 源码路径 sogouimebs_platform/sogouimebs_base,静态链接完整 OpenSSL | 搜狗输入法内部 IME 基础平台 SDK |
| libgpen_handwriter.so | 源码路径 sogou_nnet.cpp/sogou_utils,符号 sogou::nnet::handwriting::CTC_Blstm | 搜狗手写神经网络核心(BiLSTM+CTC,NDK r15c/clang 5.0 编译,2017 年技术) |
| libhwInterface.so | JNI 类名 com.boyasec.ime.input.sogou.SogouEngine | 博雅英杰(Boyasec)商业 SDK 封装层 |
| libhandwriting.so | Android NDK r522817/clang 18(2024-25 编译) | 语燕自写 JNI 壳 |
技术视角判断:①手写识别为 2017 年 BiLSTM+CTC 旧引擎,落后当前端侧识别一代;②供应链三层不透明(搜狗商业 SDK → 博雅英杰 → 语燕),无源码/无更新日志/无安全公告;③行为边界清晰——宿主 app 无 INTERNET 权限,该库无法外发数据,风险半径被系统权限钳住;④独家风险——全行业仅语燕使用,安全研究、漏洞披露、兼容性生态空白。
类比参照:同文(osfans)手写用自编译 librime 方案、小企鹅 fcitx5-android 用自研——主流 Rime 系开源输入法均不依赖商业闭源手写 SDK,语燕是特例。
三、Rime 系安卓输入法键盘布局(双字母能力)
| 输入法 | 开源/活跃度 | 键盘布局体系 | 双字母共键 |
|---|---|---|---|
| TRime 同文 | GPL-3.0 / 4.7k★ 活跃(2026-09-25 push) | YAML 全自定义(preset_keyboards),内置仅"26键默认布局";九宫格/双拼/任意布局靠配置 patch | 机制支持(每键可绑任意字符/组合),无内置模板 |
| fcitx5-android 小企鹅 | GPL / 5.7k★ 活跃 | Kotlin 硬编码:TextKeyboard(标准 QWERTY)+ 数字键盘,无九宫格 | 不支持(每键单字母) |
| YuyanIme 语燕 | BSD-3 / 3.7k★ 半停滞 | T9九宫格、全键QWERTY、双拼×7、数字行、手写、笔画 | 无 |
| 洛书输入法 | 闭源(酷安) | trime 魔改 → 机制与 trime 同源 | 理论可,源码不可验证 |
| 指尖输入法 | 闭源(酷安) | trime 魔改 | 同洛书 |
| 仓输入法(安卓) | 主战场 iOS/macOS,安卓版未证实 | Rime 内核 | 未确认 |
双字母键盘布局分两种情况:
① 若指双拼(两键拼一音节)——全系支持:语燕内置最全(小鹤/智能ABC/自然码/紫光/微软/搜狗/乱序17);trime/小企鹅通过 rime schema 加载任意双拼方案。
② 若指两字母共一键的紧凑布局(黑莓 BB10 / Windows Phone 式,如 P+Q 共键)——没有任何一家内置:语燕、小企鹅键系统单字母实现不了;唯一可行路径是 TRime 的 preset_keyboards YAML 自定义(洛书/指尖同源理论上可行)。
四、结论
使用建议:隐私要求高 → 语燕可用(零网络权限,唯二手写引擎为闭源旧库,介意则不用手写功能);需要非常规键盘布局(双字母共键)→ 选 TRime,自写/找 preset_keyboards 配置即可。
调研日期:2026-09-26。仓库状态:trime @ master (2026-09-25)、fcitx5-android @ master (2026-09-24)、yuyansdk @ d5609cc。