本文综合微信公众号「霞鹜」(lxgwshare),点击 此处 阅读原文。第一次在少数派上写文章,疏漏之处在所难免,还望各位读者多多包涵和批评指正。
由 @topjohnwu 开发的 Magisk 以其systemless(不改动系统)特性成功代替了以往的 root 神器 SuperSU,成为当前 Android 玩机爱好者的必备工具之一。通过 Magisk 我们不仅可以获取 root 权限,还可以挂载各种模块来实现系统优化或功能增强。
关联阅读:
而对一些手机美化爱好者来说,更换系统字体是一种常见的需求。但不同系统下替换字体的方式也不尽相同,比如 MIUI、EMUI 等定制 ROM 可以通过将字体文件做成主题包,通过导入主题的方式实现系统字体更换;而没有主题字体功能的手机则需要先获取 root 权限,然后才能手动对系统字体进行更换(因为字体文件一般在系统文件夹 system/fonts 里)。
在 TWRP 等第三方 recovery 出现后,字体卡刷包也出现了,它们为 root 替换字体的玩家们提供了不少便利。但这种方法不但修改了系统的文件,而且不易卸载(需要对原机字体进行备份),直到上面提到的 Magisk 的出现,才彻底改变了 Android 手机的字体更换体验——借助 Magisk 字体模块,我们可以将喜爱的字体和修改后的配置文件打包成模块,利用 Magisk 的 systemless 特性挂载达到更换系统字体的目的。模块化的字体也易于更换和卸载。
Magisk 字体模块的「得」与「失」
和上面提到的利用主题更换字体的方法相比,Magisk 字体模块最大的优势在于可以实现多字重显示和全局替换。
某些 ROM 利用主题包更换字体时,只能替换和显示一个字重且无法实现全局覆盖(如 MIUI 使用主题方法更换字体之后,Webview 还是显示为默认字体)。而用 Magisk 字体模块,这个问题就能得到解决。
左图为 MIUI 主题商店里某字体的显示效果,右图为某字体模块替换后的显示效果,可以看到用模块可以实现全局覆盖以及多字重替换。
但 Magisk 字体模块在制作上比较麻烦:我们需要将一款字体制作成多个字体文件用来替换英文、中文字体,还要修改fonts.xml描述文件来实现对多字重字体的调用。
相比而言主题包的制作更加简单,只需要一个 ttf 格式的字体和一个可以将字体打包成主题的美化软件,比 Magisk 字体模块更容易制作(而且主题替换方法无需 root 权限)。
因此自然会有人问:
有没有更简单的方法,可以将自己喜欢的 ttf 格式字体转换成 Magisk 模块,不用苦等字体模块作者手动制作吗?
为此我制作了一个字体模块模板,借助这个模块,你可以将自己喜爱的 ttf 字体打包成 Magisk 模块,实现系统字体全局替换。
字体模块模板的制作历程
以下是制作 TTF 转 Magisk 模块模板的基本原理和制作过程,如果你感兴趣的话不妨阅读了解一下。
从 fonts.xml 下手,了解系统字体调用原理
从 Android 7.0 开始,Android 系统的字体就由一个 fonts.xml 文件(在 system/etc 目录下存放)来控制。这个 XML 文件用来定义系统的默认字体,以及多语种字体的调用情况。系统利用