惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Troy Hunt's Blog
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
F
Full Disclosure
Recorded Future
Recorded Future
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
博客园_首页
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Hacker News: Front Page
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
博客园 - 司徒正美
Webroot Blog
Webroot Blog
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
Cloudbric
Cloudbric
PCI Perspectives
PCI Perspectives
有赞技术团队
有赞技术团队
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
量子位
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tailwind CSS Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
N
News and Events Feed by Topic
罗磊的独立博客
T
Threat Research - Cisco Blogs
Schneier on Security
Schneier on Security
T
Tor Project blog
IT之家
IT之家
M
MIT News - Artificial intelligence
S
Security @ Cisco Blogs
O
OpenAI News
AI
AI
S
Securelist
Simon Willison's Weblog
Simon Willison's Weblog
The Last Watchdog
The Last Watchdog
月光博客
月光博客
Security Archives - TechRepublic
Security Archives - TechRepublic
L
LINUX DO - 热门话题

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
为 Android 换上任意喜欢的字体,你可以试试这个 Magisk 模块 - 少数派
2019-12-25 · via 少数派

本文综合微信公众号「霞鹜」(lxgwshare),点击 此处 阅读原文。第一次在少数派上写文章,疏漏之处在所难免,还望各位读者多多包涵和批评指正。


由 @topjohnwu 开发的 Magisk 以其 systemless(不改动系统)特性成功代替了以往的 root 神器 SuperSU,成为当前 Android 玩机爱好者的必备工具之一。通过 Magisk 我们不仅可以获取 root 权限,还可以挂载各种模块来实现系统优化或功能增强。

关联阅读:

而对一些手机美化爱好者来说,更换系统字体是一种常见的需求。但不同系统下替换字体的方式也不尽相同,比如 MIUI、EMUI 等定制 ROM 可以通过将字体文件做成主题包,通过导入主题的方式实现系统字体更换;而没有主题字体功能的手机则需要先获取 root 权限,然后才能手动对系统字体进行更换(因为字体文件一般在系统文件夹 system/fonts 里)。

在 TWRP 等第三方 recovery 出现后,字体卡刷包也出现了,它们为 root 替换字体的玩家们提供了不少便利。但这种方法不但修改了系统的文件,而且不易卸载(需要对原机字体进行备份),直到上面提到的 Magisk 的出现,才彻底改变了 Android 手机的字体更换体验——借助 Magisk 字体模块,我们可以将喜爱的字体和修改后的配置文件打包成模块,利用 Magisk 的 systemless 特性挂载达到更换系统字体的目的。模块化的字体也易于更换和卸载。

和上面提到的利用主题更换字体的方法相比,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 文件用来定义系统的默认字体,以及多语种字体的调用情况。系统利用 fonts.xml 从上往下调用文件里面指定的字体,最先调用的就是默认字体,如果默认字体缺失,可能会导致无法进入系统。

在 fonts.xml 里,最先被调用的就是系统的默认字体 Roboto 了。下面是系统默认 sans-serif 字体 Roboto 的调用语句。

<!-- first font is default -->

<family name="sans-serif">

<font weight="100" style="normal">Roboto-Thin.ttf</font>

<font weight="100" style="italic">Roboto-ThinItalic.ttf</font>

<font weight="300" style="normal">Roboto-Light.ttf</font>

<font weight="300" style="italic">Roboto-LightItalic.ttf</font>

<font weight="400" style="normal">Roboto-Regular.ttf</font>

<font weight="400" style="italic">Roboto-Italic.ttf</font>

<font weight="500" style="normal">Roboto-Medium.ttf</font>

<font weight="500" style="italic">Roboto-MediumItalic.ttf</font>

<font weight="900" style="normal">Roboto-Black.ttf</font>

<font weight="900" style="italic">Roboto-BlackItalic.ttf</font>

<font weight="700" style="normal">Roboto-Bold.ttf</font>

<font weight="700" style="italic">Roboto-BoldItalic.ttf</font>

</family>

再往下就是一些变体(serif、sans-serif condensed、monospace 等)的调用语句,然后就是 fallback 字体了,一般是多语种字体,family 标签后面都有所对应的语言。[下面是中日韩文字体(下称 CJK 字体)的调用语句。]

<family lang="zh-Hans">

<font weight="400" style="normal" index="2">NotoSansCJK-Regular.ttc</font>

<font weight="400" style="normal" index="2" fallbackFor="serif">NotoSerifCJK-Regular.ttc</font>

</family>

<family lang="zh-Hant,zh-Bopo">

<font weight="400" style="normal" index="3">NotoSansCJK-Regular.ttc</font>

<font weight="400" style="normal" index="3" fallbackFor="serif">NotoSerifCJK-Regular.ttc</font>

</family>

<family lang="ja">

<font weight="400" style="normal" index="0">NotoSansCJK-Regular.ttc</font>

<font weight="400" style="normal" index="0" fallbackFor="serif">NotoSerifCJK-Regular.ttc</font>

</family>

<family lang="ko">

<font weight="400" style="normal" index="1">NotoSansCJK-Regular.ttc</font>

<font weight="400" style="normal" index="1" fallbackFor="serif">NotoSerifCJK-Regular.ttc</font>

</family>

在坚果 Pro 3 发布的时候,坚果推出了方正定制的 UI 字体——Smartisan T黑。随后我收到了某个大佬分享的 Smartisan OS 7.0 字体及配置文件。在分析 Smartisan OS 字体配置的时候,发现它的默认字体是这么配置的:

<family name="sans-serif">

<font weight="100" style="normal">Smartisan_Compact-Thin.otf</font>

<font weight="300" style="normal">Smartisan_Compact-Light.otf</font>

<font weight="400" style="normal">Smartisan_Compact-Regular.otf</font>

<font weight="500" style="normal">Smartisan_Compact-Medium.otf</font>

<font weight="900" style="normal">Smartisan_Compact-Heavy.otf</font>

<font weight="700" style="normal">Smartisan_Compact-Bold.otf</font>

</family> ……

<family>

<font weight="100" style="normal">Roboto-Thin.ttf</font>

<font weight="100" style="italic">Roboto-ThinItalic.ttf</font>

<font weight="300" style="normal">Roboto-Light.ttf</font>

<font weight="300" style="italic">Roboto-LightItalic.ttf</font>

<font weight="400" style="normal">Roboto-Regular.ttf</font>

<font weight="400" style="italic">Roboto-Italic.ttf</font>

<font weight="500" style="normal">Roboto-Medium.ttf</font>

<font weight="500" style="italic">Roboto-MediumItalic.ttf</font>

<font weight="900" style="normal">Roboto-Black.ttf</font>

<font weight="900" style="italic">Roboto-BlackItalic.ttf</font>

<font weight="700" style="normal">Roboto-Bold.ttf</font>

<font weight="700" style="italic">Roboto-BoldItalic.ttf</font>

</family>

也就是说,Smartisan OS 7.0 把 6 字重的 Smartisan T 黑作为系统默认调用的字体,把 Roboto 作为 fallback 字体,使 Smartisan T 黑缺字部分 fallback 到 Roboto 上,然后再往下 fallback,在调用 T 黑的同时保证不缺字(估计大多数魔改过字体的定制 ROM 一般都是这么调用的)。

我从中受到了启发,得到了 TTF 转 Magisk 模块的基本思路。

修改 fonts.xml,使其调用自定义字体1

在受到启发之后我突发奇想,假如有一个自定义的 ttf 格式的字体名叫「font.ttf」,将其放在系统的字体文件夹 system/fonts 下,然后让系统默认调用这个字体,不就实现 TTF 字体更换了吗?

于是我对 fonts.xml 进行了如下修改:

  1. 将 fonts.xml 里面调用默认字体的部分进行修改:

    <!-- first font is default -->

    <family name="sans-serif">

    <font weight="400" style="normal">font.ttf</font>

    </family>

  2. 在后面 fallback 字体的部分加上对 Roboto 的调用:

    <!-- fallback fonts -->

    <family>

    <font weight="100" style="normal">Roboto-Thin.ttf</font>

    <font weight="100" style="italic">Roboto-ThinItalic.ttf</font>

    <font weight="300" style="normal">Roboto-Light.ttf</font>

    <font weight="300" style="italic">Roboto-LightItalic.ttf</font>

    <font weight="400" style="normal">Roboto-Regular.ttf</font>

    <font weight="400" style="italic">Roboto-Italic.ttf</font>

    <font weight="500" style="normal">Roboto-Medium.ttf</font>

    <font weight="500" style="italic">Roboto-MediumItalic.ttf</font>

    <font weight="900" style="normal">Roboto-Black.ttf</font>

    <font weight="900" style="italic">Roboto-BlackItalic.ttf</font>

    <font weight="700" style="normal">Roboto-Bold.ttf</font>

    <font weight="700" style="italic">Roboto-BoldItalic.ttf</font>

    </family>

  3. 在调用 CJK 字体的语句前面再加上如下语句,防止西文变体在调用之后直接调用默认的思源黑体:

    <family lang="zh-Hans">

    <font weight="400" style="normal">font.ttf</font>

    </family>

    <family lang="zh-Hant">

    <font weight="400" style="normal">font.ttf</font>

    </family>

    <family lang="ja">

    <font weight="400" style="normal">font.ttf</font>

    </family>

    <family lang="ko">

    <font weight="400" style="normal">font.ttf</font>

    </family>

  4. 有些类原生 ROM 桌面会调用 Condensed 字体,为了使其调用自定义 ttf 字体,作者在调用 Condensed 语句处做了如下修改:

    <alias name="sans-serif-condensed" to="sans-serif" />

    <alias name="sans-serif-condensed-light" to="sans-serif-condensed" weight="300" />

    <alias name="sans-serif-condensed-medium" to="sans-serif-condensed" weight="500" />

然后把修改之后的 fonts.xml 打包成 Magisk 模块,将其放入模块里的 system/etc 文件夹内,再将自定义的字体文件重命名为 font.ttf 放入模块的 system/fonts 文件夹内,然后将该模块刷入。

重启,就可以看到系统字体已经被替换成自定义的 font.ttf 了。

以从 OPPO 官网下载的 OPPO Sans 为例,利用 TTF 转 Magisk 模块模板,可以将系统字体更换为 OPPO Sans,而无需修改系统字体文件。

相应地,单字重字体如果不想看到系统强制渲染加粗糊成一块的效果,可以让所有字重都调用这个 font.ttf:2

<!-- first font is default -->

<family name="sans-serif">

<font weight="100" style="normal">font.ttf</font>

<font weight="300" style="normal">font.ttf</font>

<font weight="400" style="normal">font.ttf</font>

<font weight="500" style="normal">font.ttf</font>

<font weight="900" style="normal">font.ttf</font>

<font weight="700" style="normal">font.ttf</font>

</family>

使用「防止加粗变糊」模块之后的效果。

如果是一有多个字重的字体家族,想让系统调用多个字重,可以这么改(当然必须将多字重字体按照字重等级命名为「fontw1.ttf」~「fontw9.ttf」放到 system/fonts 目录下)。3

<!-- first font is default -->

<family name="sans-serif">

<font weight="100" style="normal">fontw1.ttf</font>

<font weight="200" style="normal">fontw2.ttf</font>

<font weight="300" style="normal">fontw3.ttf</font>

<font weight="400" style="normal">fontw4.ttf</font>

<font weight="500" style="normal">fontw5.ttf</font>

<font weight="600" style="normal">fontw6.ttf</font>

<font weight="700" style="normal">fontw7.ttf</font>

<font weight="800" style="normal">fontw8.ttf</font>

<font weight="900" style="normal">fontw9.ttf</font>

</family>

使用多字重模块之后的效果,前提是已按照字重将对应字体文件重命名为规定文件名。

一个新的问题

这样是能实现系统字体更换了,但是有个问题:有些字体由于自身的度量数据,以及一些字符的影响,在使用模块模板更换字体之后,可能会有偏移或者行距过大等问题(比如思源黑体/思源宋体,因为某些字符的影响,直接应用该字体会导致偏移严重)。

直接替换「思源宋体 Medium」之后造成的偏移、错位、行距过大问题

从字体层面上解决这样的问题,不仅要考虑度量,还要考虑是否有过长的字符造成这样的偏移,比较麻烦。

有一天,在极限论坛,偶然发现了极限大神「RadarNyan」(下称 R 大)分享了 ta 对于更换字体偏移的思路(帖子时间比较久远,但对 6.0 以上的 Android 仍然适用)。

RadarNyan 在极限社区分享替换字体的思路

简要说一下 R 大的思路:将系统默认字体 Roboto 的 12 个字体文件(6 个字重×2 个变体)掏空,保留其度量数据,做成 RobotoFake 文件,然后修改 fonts.xml,使系统首先调用 RobotoFake 空字体文件来控制所显示字体的度量参数,然后向下 fallback 到自定义字体文件和 Roboto;之后在中日韩文处再调用一遍自定义字体文件,然后再调用系统默认的 NotoSansCJK 来补全缺字。感兴趣的,可以点击这里了解一下详细的思路。

解决偏移4

于是,作者在模块模板的 system/fonts 目录里面加入了 R 大制作的 12 个「RobotoFake」字体文件,然后对 fonts.xml 进行了修改:

主要是在调用默认字体的语句处做如下修改:

<!-- 首先调用 RobotoFake 字体,控制所显示字体的度量参数,防止出现偏移 --> <family name="sans-serif">

<font weight="100" style="normal">RobotoFake-Thin.ttf</font>

<font weight="100" style="italic">RobotoFake-ThinItalic.ttf</font>

<font weight="300" style="normal">RobotoFake-Light.ttf</font>

<font weight="300" style="italic">RobotoFake-LightItalic.ttf</font>

<font weight="400" style="normal">RobotoFake-Regular.ttf</font>

<font weight="400" style="italic">RobotoFake-Italic.ttf</font>

<font weight="500" style="normal">RobotoFake-Medium.ttf</font>

<font weight="500" style="italic">RobotoFake-MediumItalic.ttf</font>

<font weight="900" style="normal">RobotoFake-Black.ttf</font>

<font weight="900" style="italic">RobotoFake-BlackItalic.ttf</font>

<font weight="700" style="normal">RobotoFake-Bold.ttf</font>

<font weight="700" style="italic">RobotoFake-BoldItalic.ttf</font>

</family>

<!-- 调用自定义字体文件 -->

<family>

<font weight="400" style="normal">font.ttf</font>

</family>

<!-- 缺少的字符向下 fallback -->

<family>

<font weight="100" style="normal">Roboto-Thin.ttf</font>

<font weight="100" style="italic">Roboto-ThinItalic.ttf</font>

<font weight="300" style="normal">Roboto-Light.ttf</font>

<font weight="300" style="italic">Roboto-LightItalic.ttf</font>

<font weight="400" style="normal">Roboto-Regular.ttf</font>

<font weight="400" style="italic">Roboto-Italic.ttf</font>

<font weight="500" style="normal">Roboto-Medium.ttf</font>

<font weight="500" style="italic">Roboto-MediumItalic.ttf</font>

<font weight="900" style="normal">Roboto-Black.ttf</font>

<font weight="900" style="italic">Roboto-BlackItalic.ttf</font>

<font weight="700" style="normal">Roboto-Bold.ttf</font>

<font weight="700" style="italic">Roboto-BoldItalic.ttf</font>

</family>

多字重的修改方法可见上上一节,这里不再赘述。

经过上述优化之后,再用同样的字体,偏移问题得到了解决。

使用 RadarNyan 提供的方法之后,解决偏移问题。

模块模板的获取和使用

模板下载:

OneDrive | Dropbox | Google Drive | 百度云(提取码 9ep7)| 蓝奏云(提取码 88zx)

包括 2.0 和 3.0 两个版本,分别包含 a(单字重版)、b(单字重防止加粗变糊版)、c(多字重版)。不懂三者区别的可返回到「字体模块模板的制作历程一章进行了解。

单字重模块模板

将自己喜爱的 TTF 格式文件重命名为 「font.ttf」(区分大小写,otf 扩展名要改成 ttf),然后复制到模块模板里的 「system/fonts」文件夹内,刷入,重启,即可看到效果。

点击此处查看详细的使用方法示例。

多字重模块模板

将自己喜爱的字体家族按照字重等级重命名为「fontw#.ttf」(# 号表示 1~9 的阿拉伯数字,从 1 到 9 分别对应 Extralight、Thin、Light、Regular、Medium、Semibold、Bold、Heavy、Black 由细到粗 9 个字重,区分大小写,otf 扩展名要改成 ttf),然后复制到模块模板里的 「system/fonts」文件夹内,刷入,重启,即可看到效果。

点击此处查看详细的使用方法示例。

修改模块信息

可以通过修改模块里的 「module.prop」 修改模块信息。

id=lxgwttf2magisk # 模块的 ID,只支持半角英文和数字,不能以纯数字开头

name=TTF 转 Magisk 模块模版 # 模块的名称,模块刷入后,此名称会在 Magisk Manager 里显示

version=3.0 # 模块的版本

versionCode=5 # 模块的版本代号

author=落霞孤鹜 [lxgwshare] # 模块的作者

description= # 这里填写模块描述,模块刷入后会在 Magisk Manager 里显示

minMagisk=17000 # 支持此模块的最低 Magisk 版本

特别注意

  1. 使用前需要解 Bootloader 锁,并刷入 Magisk。解锁过程会清除所有数据,强烈建议解锁前先备份手机里的数据。
  2. 对于某些魔改过字体的 ROM(如 MIUI11),请慎用本模块,可能会出现兼容性问题。
  3. 严禁将此模块用于商业营利用途!

结语

本文介绍了 TTF 转 Magisk 模块模板的制作原理以及使用方法,使用这个模块模板,可以使系统字体的更换变得更加方便快捷。

> 下载少数派 客户端、关注 少数派公众号,轻松玩转 Magisk 模块 🎭

> 特惠、好用的硬件产品,尽在 少数派 sspai 官方店铺 🛒