Android 7.0+ CJK 擴充字 新增額外字庫

Prologue

最近剛好有用手機看書的需求
再加上看的都是一些很古老的書 (ex. 山海經)
自然就會出現許多稀難字
有興趣的朋友可以先到 這裡 看一下自己是不有一堆口 XD
其實就連電腦應該也不少人滿滿的口

那也因為這樣
書看一看就一個口
而那些古字通常都是重要的名詞
我要馬得跳過要馬得去用我的電腦
哪來隨時能用電腦啊
我就看的正爽被卡,豈有此理 =日=
所以我很不爽,就產生了這篇文章…

Intro

先來說說為什麼會出現口
一般我們的裝置中都會有一些預設字體
而我們看到的 “字” 其實是從字體檔中
編號 對應 圖形 然後顯示給我們看
那如果字體檔本身不支援到某些編號
自然就印不出那些字啦~ 所以就變成口了

好的 那就開始進入正題

這次要用的字體為 hanazono (俗稱 花園字體)
本身支持 CJK Ext.A ~ Ext.F
而最新的擴充區只到 G
等於說 花園字體 目前幾乎全包了各種詭異中文字,字量堪稱龐大
也讓我們期待什麼時候更新 Ext.G 進去吧XD

Notice & Tools

  • 注意
    • :::danger
      > ROOT Only <

      接下來會動到系統
      如果不會救磚,請不要恣意操作
      :::

    • 沒有 root 的檔案瀏覽器是沒辦法動到系統的喔
      當然你也可以用 adb shell

沒有 Root,不叫 Android [name=chess]

  • 工具

    • MiXplorer
      • 先跟各位介紹一款 Android 上目前我認為最神的檔案瀏覽器
        這不是工商,因為我沒收錢
        至於它有多強大的功能,各位可以自己去看看
      • 接下來的操作你會大量需要它
  • 所需檔案

    • HanaMinA.ttf, HanaMinB.ttf (下載花園字體解包獲得)
    • /system/etc/fonts.xml
    • /system/fonts/

Tutorial

  1. 先將HanaMinA.ttf, HanaMinB.ttf 複製到 /system/fonts/ 底下
    並將這兩個檔案權限設定為 644 (-rw-r--r--)
    並且 擁有者群組 確定為 root

  2. 打開 /system/etc/fonts.xml 開始修改
    直接拉到底部

    1
    2
    3
    4
    5
        <family lang="zg">
    <font weight="400" style="normal">MyanmarSangamZawgyi-Regular.otf</font>
    <font weight="700" style="normal">MyanmarSangamZawgyi-Bold.otf</font>
    </family>
    </familyset>

    你會看到一堆類似的東西,裡面內容物可能不一樣
    不過沒關係
    我們只需要找到 </familyset>
    在它的前面新增東西即可

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        <family lang="zg">
    <font weight="400" style="normal">MyanmarSangamZawgyi-Regular.otf</font>
    <font weight="700" style="normal">MyanmarSangamZawgyi-Bold.otf</font>
    </family>
    <!-- custom CKJ Extension begin -->
    <family>
    <font weight="400" style="normal">HanaMinA.ttf</font>
    </family>
    <family>
    <font weight="400" style="normal">HanaMinB.ttf</font>
    </family>
    <!-- custom CKJ Extension end -->
    </familyset>

    那兩段灰色字之間就是我們自己新增的段落

    儲存之後
    重開瀏覽器去看上面一堆口的網頁是否有正常顯示那些字
    有顯示那些奇怪字就代表成功囉~

Epilogue

雖然說整個教學區塊非常短就結束了
但我幾乎都要爬爆 Google 了才找到解答 QQ
主要是因為網路上的教程幾乎都是在處理多字重的問題
完全沒看到討論擴充字
花了幾天終於看到一篇作者自己寫了 Magisk 套件來處理這個問題
我也去分析了這個專案到底如何做到這個功能
也因此才完整理解了 font.xml 這份文件的運作原理

再來就是為什麼標題會寫 7.0+ 呢?
是因為 Android 7.0 之後的字體 loading 方式有所變更
目前為止到 10.0 應該都是可以用的 (?
在之前都是由 fallback_fonts.xmlfonts.xml 共存來處理
而在 7.0 之後直接捨棄了 fallback_fonts.xml
並將整個 fonts.xml 重寫
使得檔案減少但是功能卻更齊全也更容易讀懂

最後的最後我一定要噴一下
原本用了這支 ASUS Zenfone 3 Deluxe 一年多就不維護系統
這支是旗艦機欸 ASUS 大大
連原本自家論壇都被抹掉 一堆資料都找不太到
這些綜合因素讓我很不爽
一度有了這隻壞了就想要跳坑 iPhone 的想法

但經過這次之後我覺得還是 Android 比較香
喔絕對不是 ASUS 香
我以後不會再買這家的手機了
再加上 iPhone 感覺越來越沒有特別突出的地方
所以最後決定還是要留在我大安卓自由國度~

不知道這隻什麼時候會壞掉 我想換 Pixel ~

如有任何指教 歡迎發信給我~