RIME / 雾凇拼音 Android 配置与同步
简介
RIME/中州韵 是一个输入法引擎,能够通过配置文件打造出自己的输入法。这里所谓的「输入法」更多指的是字符映射(比如全拼中 “ai” 可以映射为 ”爱“ 等许多字符)、组词造句、词频词库等等逻辑上的东西,它还需要一个面向用户的客户端才能成为我们熟知的、能看见的输入法。
在 Android 平台比较有名的有两个客户端:
- 同文输入法 / Trime: https://github.com/osfans/trime
- 小企鹅输入法 / Fcitx5-android + Rime 插件: https://fcitx5-android.github.io
Rime/小狼豪/鼠须管 输入法配置记 介绍了如何在 mac / PC 上安装 RIME 并初步定制属于自己的输入法。
雾凇拼音 是一套著名的 RIME 配置,提供全拼/多方案双拼/九宫格等输入模式,并且实现了不输于甚至强于商业输入法的功能,还附带高质量词库。感谢雾凇拼音让我迁移到 RIME 3 年多丝毫不怀念商业输入法。
在 Google 三番五次地折腾 Android 文件模型/权限管理的背景下,常规用户基本无法成功配置好 Rime 的词库同步(甚至不会配置 Rime 本身),本文选用 Fcitx5-android,手把手教你怎么搞定它们并尽力解释一下背后的原理。
客户端安装
首先需要安装 fcitx5-android 本身(GooglePlay | F-Droid | Github)。
然后从 Github 下载安装与本体版本匹配的 RIME 插件:打开发布页面找到对应的版本,那里会有一个表格,找到 plugin.rime
那一行,一般来说下载 arm64-v8a
即可,如果无法安装则尝试 armeabi-v7a
(你确定不把这个破手机丢到有害垃圾桶吗?)。
完成后打开 Fcitx5,点击 Plugins
应该可以看到已加载的 rime 插件。回到主页点击 Input Methods
,点击右下角添加按钮,找到 Rime 并添加。
最后别忘了在系统中启用新的输入法(打开 App 时应该提醒你的来着)。到此为止 RIME 已经可以工作了,但由于没有任何配置文件,大概连中文都打不出来。
配置雾凇拼音
准备配置文件
打开发布页面找到最新版,展开 Assets
,下载 full.zip
解压,将其传到手机指定位置。如果有其他已经配置好 RIME 的设备,建议优先重用这些文件以保留个性化配置。但注意不要复制这些(如果有):
installation.yaml
: 每个设备独特的安装配置。user.yaml
: 一些元数据。build
: 客户端部署时会重新构建的。plum
: RIME 的方案管理器,在 Android 上没啥用。
具体来说,有两种传输方案:电脑辅助 / 纯手机操作。
【电脑辅助】
把手机用数据线连接电脑(mac 默认不支持)并允许访问(无需开发者模式 / adb)。打开电脑的文件资源管理器,进入手机,把准备好的文件一股脑复制到 Internal storage\Android\data\org.fcitx.fcitx5.android\files\data\rime
就行了。再次提醒不要覆盖已有的 installation.yaml
文件。完成后文件大概如图所示(随着版本更新有个别文件不一样没关系):
【纯手机操作】
科普时间
现代 Android 已不允许任何应用(包括系统的文件管理器)以任何方式直接修改数据文件,即任何
Android/data
下的文件,也无法手动授权。如果一个应用的确希望暴露它的私有文件,则需要通过一个叫 "ContentProvider" 内容提供者的机制。它更像是沙盒,通过一种逻辑目录(而不是物理目录)来允许外界访问内部资源,形如content://org.fcitx.fcitx5.android/xxxx
。对于其他位置,应用默认无权读写。但可通过 ① 请求「访问所有文件」这一特殊权限;或 ② 使用 FAS 请求用户授权(即打开一个对话框要求你选择允许访问的目录)来获得读写权限。
还有几个默认就是公开读写的特殊位置,比如下载目录(
Download
) 或文档目录 (Documents
),任何应用无需显式授权就可访问。但只能编辑自己创建的文件,不过这一限制可通过上述两个途径解除。
如果你手机的文件管理器带有读取 ContentProvider 的功能,那么恭喜,直接把配置文件拷贝到 Fcitx5/data/rime
就行了。
怎么判断是否支持 ContentProvider?
到处找一找,着重关注顶层的位置选项或文件分类,看是否有带有 Fcitx5 图标且名字就是 Fcitx5(小企鹅输入法)的入口。实在找不到也没关系,下面的变通方案也不是很麻烦。
如果默认的文件管理器不支持或者找不到入口也不用担心,所有通过了兼容性认证的 Android 系统都有一个内置的隐藏的文件管理器,它的功能精简、UI 丑陋,但支持 ContentProvider!
- 首先把准备好的配置文件放到一个易于寻找的目录(比如
/Download/rime
),这样一会使用残废的隐藏文件管理器不至于找不到它们。 - 打开 Fcitx5,点击
输入法 - Rime ⚙️ 图标 - User data dir - 确定
。这时候隐藏的管理器就被唤醒啦,点击左上角的菜单,进入之前准备好的目录,拷贝所有文件,粘贴到Fcitx5/data/rime
里面吧。
激活配置
- 随便找个打字的地方唤出 Fcitx5 输入法,点击候选词栏的更多按钮(三个点)。
- 点击重载配置。
- 提示完成后点击代码图标的按钮,选择
Deploy
。耐心等待完成,首次部署大型方案会比较慢,甚至接近 1 分钟。 - 重新点击按钮,选择你喜欢的输入方案吧。
词库同步
自定义同步目录
这里主要给小伙伴们解释清楚自定义目录的权限问题。至于用什么软件实现同步就看各自的选择啦,我这边用的是 Syncthing。
经过了上文的「科普时间」(没看过的先去看!),我们已经知道其他应用不可能修改 Fcitx5-rime 默认的配置位置下的文件,自然也去没法实现双向同步。所以需要将同步目录配置到一个双方(Fcitx5 与同步工具)都有可能读+写的位置。仅剩的选择就是 Android 预留的几个资源目录,排除音乐等明显不合适的地方, 能选的只有 Download
与 Documents
。下载目录里面文件比较乱,所以我这边放到了 Documents
中。
同步目录在 Fcitx5-rime 的 userdata/data/rime/installation.yaml
中配置,忘记怎么打开的回去看看上一节。如果文件不存在大概是你忘记部署了(Deploy)。用一个称手的文本编辑器(手机/电脑均可),不要用 Office/WPS 等富文本软件,它们可能会破坏文件格式。
yaml
是一个纯文本配置文件格式,最简单的语法为name: value
,每行一个。如果配置项的值是文本,强烈建议用英文引号"
括起来。
对于已有的内容,最好修改 installation_id
的值为手机型号等,它将作为同步目录中此设备对应的目录名。不建议使用中文。
然后添加一行新配置来指明同步目录:sync_dir: "/storage/emulated/0/Documents/RimeSync"
。其中 /storage/emulated/0
是 Android 系统内置存储惯用的路径,在绝大部分设备上都是这个。
小技巧
以点 (.
) 开头的目录/文件将在资源管理器中默认隐藏,可防止误删。例如可以配置为/storage/emulated/0/Documents/.RimeSync
。
修改后的文件应该类似(数值可能不同):
distribution_code_name: "fcitx-rime"
distribution_name: Rime
distribution_version: 5.1.10
install_time: "xxxxxx"
installation_id: "xxxxxxxxx"
rime_version: 1.12.0
sync_dir: "/storage/emulated/0/Documents/RimeSync"
按照上文「激活配置」中的步骤重载配置并重新部署,然后记得再点一下 Synchronize
。用文件管理器打开刚刚设置的目录,如果里面出现了一堆文件就代表成功了。
配置同步软件
大家各自选用的同步软件都不一样,所以这里就不再手把手教啦(主要 Syncthing 是自托管的,使用门槛比较高,不推荐非专业同学使用)。既然我们已经把文件存到了公共目录,理论上同步软件可以请求「访问所有文件」或通过 FAS 让我们选择同步目录来授予读写权限。如果你的同步软件遇到了权限问题则很可能是它没有适配 Android 最新的文件模型,建议换用其他应用,比如 FolderSync。
同步原理
最后澄清一点,Rime 的同步是全手动的。没错,一点都不自动。具体来说,假如希望在设备 B 上获得设备 A 最新的词库,则需要:
- 在设备 A 上点击 Rime 的同步。
- 等待文件同步到设备 B。
- 在设备 B 上点击 Rime 的同步。
也许不同平台不同客户端,可以通过某些技巧配合其他工具实现定时同步,但这需要根据自身情况研究,没有通用的方案。好在雾凇拼音本身词库已经足够强大,日常积累的个性化词库想起来同步下就好,不会太影响使用。
进入同步文件文件夹,应该可以看到 N 个目录,N 是你在所有平台安装的 RIME 的个数,目录名由各自 installation.yaml
中的 installation_id
决定。里面除了 *.userdb.txt
的词库文件外,RIME 也会把配置文件备份到这里一份,不过这是单向的,而且并不完整,建议不要依赖,配置完成后还是自己打的压缩包备份比较好。
当点击同步按钮时,RIME 会遍历所有的设备目录中的词库,将它们与本地词库合并,然后把合并后的输出到同步目中当前设备的文件夹。换句话说,RIME 永远之后修改属于当前设备的目录中的文件,这样可以一定程度避免冲突,尤其在各个设备不是实时同步的情况下。