從 Android 15 開始,可變字型
以更有效率和精細的方式執行執行階段本次更新後,供應商必須
將新的變數字型設定
font_fallback.xml
敬上
而不是 fonts.xml
,因為 fonts.xml
即將淘汰。
詳情請參閱「支援可變字型」。
在 Android 11 以下版本中,在 Android 開放原始碼計畫中更新裝置安裝的字型檔案 (位於
/system/fonts
分區) 或廠商分區 (位於 /product/fonts
或
/system/fonts
分區) 需要來自原始設備製造商 (OEM) 的系統更新。這個
這會對表情符號相容性產生重大影響於
Android 12 可以使用 FontManager
系統
服務,用於管理已安裝的字型檔案及更新裝置安裝的字型檔案
不必執行系統更新
Android 12 提供三種程序互動功能。
FontManagerService
、Font Updater
和Application
。
FontManagerService
是系統伺服器中的中央管理系統。
FontManagerService
會儲存各使用者系統最新的字型設定。
FontUpdater
是可插入的字型更新工具,受到
signature|privileged
的權限檢查。FontUpdater
會透過
必須使用 FontManagerService
,才能取得、安裝、移除或更新目前的系統字型
可以管理叢集設定,像是節點
資源調度、安全性和其他預先設定項目FontUpdater
可以透過處理序間傳遞新的字型檔案內容
通訊機制 (IPC) 機制FontManagerService
會將內容儲存到
全球可讀取的儲存位置,例如 /data/fonts
檔案。這個
會妥善保護儲存空間這可以由 FontManagerService
寫入,只有
SELinux 政策。
Application
類別啟動時,會將系統字型設定做為
bindApplication
方法的引數;然後初始化字型設定
供應用程式程序使用
支援可變字型
從 Android 15 開始,可變字型設定如下
指定於
font_fallback.xml
敬上
格式如下:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
在此格式中,可變字型具有具有
額外的 supportedAxes
屬性。supportedAxes
屬性是
以逗號分隔的軸標記清單。取代為
Android 15,只有 wght
和 ital
軸可
。
如未指定 supportedAxes
屬性,font
節點會做為
使用 axis
指定的可變字型的單一靜態字型
。
如果指定 supportedAxes
屬性,系統會動態建立
特定權重和樣式值在執行階段的字型執行個體。
開發人員可以使用 android.graphics.fonts.SystemFonts#getAvailableFonts
Java API 或 ASystemFontIterator_open
NDK API 可取得系統安裝的字型檔案清單。如需深入瞭解
支援這項更新的開發人員 API,請參閱
改良的 OpenType Variable Font API
和 buildVariableFamily
。
自訂字型
部分原始設備製造商 (OEM) 會安裝或替換 Android 開放原始碼計畫中的字型檔案,展示自家品牌的產品。 Android 12 支援這項功能,但新增了 請務必確認裝置端的表情符號字型。不會修改或提供內容的原始設備製造商 (OEM) 更新表情符號字型檔案則不必使用這項功能。
Google 會透過 GMS 更新字型檔案,尤其是 NotoColorEmoji
檔案
Core,因此請勿修改或移除 NotoColorEmoji.ttf
檔案從
/system
分區,而且不從中移除
/frameworks/base/data/fonts/fonts.xml
。
請注意,自訂字型的三種方式如下:
- 將
NotoColorEmoji.ttf
檔案替換為 OEM 品牌的表情符號字型。 - 依據當地市場需求修改
NotoColorEmoji.ttf
檔案。 - 取代或修改其他字型檔案。
如果不是在 Android 開放原始碼計畫中修改表情符號字型,則無需採取任何行動。如果 如要自訂表情符號字型,請按照以下說明操作 專區。
將 NotoColorEmoji.ttf 替換成 OEM 品牌表情符號字型
如要將 NotoColorEmoji.ttf
檔案替換為 OEM 品牌的表情符號字型檔案,請按照下列步驟操作:
將表情符號字型放在字型備用鏈之前:
- 在
/system
分區中放置您自己的字型,名稱為OEMCustomEmoji.ttf
。 修改
/frameworks/base/data/fonts/fonts.xml
(和/frameworks/base/data/fonts/font-fallback.xml
英寸 Android 15 以上版本),如以下程式碼所示:<family lang="ko"> <font weight="400" style="normal" index="1">NotoSansCJK-Regular.ttc</font> </family> <!-- ADD FOLLOWING LINE --> <family lang="und-Zsye"> <font weight="400" style="normal">OEMCustomEmoji.ttf</font> </family> <!-- END OF MODIFICATION --> <family lang="und-Zsye"> <font weight="400" style="normal">NotoColorEmoji.ttf</font> </family> <family lang="und-Zsym"> <font weight="400" style="normal">NotoSansSymbols-Regular-Subsetted2.ttf</font> </family>
根據當地市場需求修改 NotoColorEmoji.ttf
請按照下列步驟依據當地市場需求自訂內容:
- 使用不同的名稱建立自己的
NotoColorEmoji
檔案;例如 將其命名為Modified\_NotoColorEmoji.ttf
。 - 將其放在原始
NotoColorEmoji.ttf
檔案前面。
執行步驟 2 後,
會顯示 Modified\NotoColorEmoji.ttf
,而不是原始 NotoColorEmoji.ttf
。
Google 建議採用以下做法:
- 這個字型中只有必要的字符。
- 將未經修改的字符委派給原始的
NotoColorEmoji.ttf
檔案,即可 裝置會收到日後發布的表情符號修正的所有設計。
移除字符:如要從 NotoColorEmoji.ttf
檔案中移除字符,請遵循
步驟 1 和 2,並在 cmap 中指定 glyph ID = 0
。
使用區域性旗標:如果目標字符是區域標記,請指定
glyph ID 為未知的國家/地區代碼。(使用 country code = "ZZ"
)。
製作豆腐字符:您可以視需要明確指定豆腐字符 ID
使用這個 API指定 glyphID = 0
時,相關應用程式會將此解讀為
「無法取得字符」。舉例來說,使用這個屬性時,
Paint#hasGlyph
應用程式會傳回 false
。
取代或修改其他字型檔案
如要取代或修改其他字型,自訂方式也類似 配合當地市場需求修改 TTF 檔案。不明的不明字型檔案 系統會忽略 Android 開放原始碼計畫 (AOSP) 更新中的更新版本,且該更新不會更新。Google 會忽略 電腦中安裝不明字型這包括從以下位置修改過的字型檔案: 開放原始碼 AOSP 中的原始字型
雖然字型更新是由 Google 在 GMS Core 中完成,但一般字型更新 所有原始設備製造商均可使用原始設備製造商 (OEM) 可使用 請參閱會議必要條件、簽署字型檔案中的步驟操作。 和進行執行階段字型更新。
Meet 必要條件
字型更新機制採用 fs-verity
Linux kernel 功能,請確認
您的裝置符合「fs-verity
」規定,並在裝置中加入憑證。
簽署字型檔案
字型檔案具有風險的資源,因此必須使用信任的金鑰驗證。
仔細檢查所有要更新的字型檔案,然後以
私密金鑰簽名必須與 fs-verity
相容。
更新執行階段字型
FontManager
系統應用程式會更新字型。「FontManager
」應用程式
提供了最新安裝的系統字型狀態,並且能夠更新字型
簽章。如要呼叫更新應用程式,請將
UPDATE_FONT signature|privileged
的權限:
應用程式許可清單
和資訊清單
將 UPDATE_FONT signature|privileged
權限提供給應用程式更新工具
函式。