文章

RIME / 雾凇拼音 Android 配置与同步

简介

RIME/中州韵 是一个输入法引擎,能够通过配置文件打造出自己的输入法。这里所谓的「输入法」更多指的是字符映射(比如全拼中 “ai” 可以映射为 ”爱“ 等许多字符)、组词造句、词频词库等等逻辑上的东西,它还需要一个面向用户的客户端才能成为我们熟知的、能看见的输入法。

在 Android 平台比较有名的有两个客户端:

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!

  1. 首先把准备好的配置文件放到一个易于寻找的目录(比如 /Download/rime),这样一会使用残废的隐藏文件管理器不至于找不到它们。
  2. 打开 Fcitx5,点击 输入法 - Rime ⚙️ 图标 - User data dir - 确定。这时候隐藏的管理器就被唤醒啦,点击左上角的菜单,进入之前准备好的目录,拷贝所有文件,粘贴到 Fcitx5/data/rime 里面吧。

激活配置

  1. 随便找个打字的地方唤出 Fcitx5 输入法,点击候选词栏的更多按钮(三个点)。
  2. 点击重载配置。
  3. 提示完成后点击代码图标的按钮,选择 Deploy。耐心等待完成,首次部署大型方案会比较慢,甚至接近 1 分钟。
  4. 重新点击按钮,选择你喜欢的输入方案吧。
    激活配置

词库同步

自定义同步目录

这里主要给小伙伴们解释清楚自定义目录的权限问题。至于用什么软件实现同步就看各自的选择啦,我这边用的是 Syncthing。

经过了上文的「科普时间」(没看过的先去看!),我们已经知道其他应用不可能修改 Fcitx5-rime 默认的配置位置下的文件,自然也去没法实现双向同步。所以需要将同步目录配置到一个双方(Fcitx5 与同步工具)都有可能读+写的位置。仅剩的选择就是 Android 预留的几个资源目录,排除音乐等明显不合适的地方, 能选的只有 DownloadDocuments。下载目录里面文件比较乱,所以我这边放到了 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 最新的词库,则需要:

  1. 在设备 A 上点击 Rime 的同步。
  2. 等待文件同步到设备 B。
  3. 在设备 B 上点击 Rime 的同步。

也许不同平台不同客户端,可以通过某些技巧配合其他工具实现定时同步,但这需要根据自身情况研究,没有通用的方案。好在雾凇拼音本身词库已经足够强大,日常积累的个性化词库想起来同步下就好,不会太影响使用。


进入同步文件文件夹,应该可以看到 N 个目录,N 是你在所有平台安装的 RIME 的个数,目录名由各自 installation.yaml 中的 installation_id 决定。里面除了 *.userdb.txt 的词库文件外,RIME 也会把配置文件备份到这里一份,不过这是单向的,而且并不完整,建议不要依赖,配置完成后还是自己打的压缩包备份比较好。

当点击同步按钮时,RIME 会遍历所有的设备目录中的词库,将它们与本地词库合并,然后把合并后的输出到同步目中当前设备的文件夹。换句话说,RIME 永远之后修改属于当前设备的目录中的文件,这样可以一定程度避免冲突,尤其在各个设备不是实时同步的情况下。