Android 15 以降では、可変フォントは
より効率的に、粒度を細かく調整できます。今回の更新により、ベンダーは
新しい可変フォント設定を追加して
font_fallback.xml
fonts.xml
が非推奨になるため、fonts.xml
の代わりに使用できるようになりました。
詳しくは、可変フォントのサポートをご覧ください。
Android 11 より前のバージョンでは、AOSP(/system/fonts
パーティション内)またはベンダー パーティション(/product/fonts
パーティションまたは /system/fonts
パーティション内)でデバイスにインストールされているフォント ファイルを更新するには、OEM によるシステム アップデートが必要でした。この要件は絵文字の互換性に大きな影響を与えます。Android 12 では、FontManager
システム サービスを使用することで、インストール済みのフォント ファイルを管理し、システム アップデートを行わずにデバイスにインストールされているフォント ファイルを更新できます。
Android 12 には、FontManagerService
、Font Updater
、Application
の 3 つのプロセス インタラクションがあります。
FontManagerService
は、システム サーバー内の集中管理システムです。FontManagerService
には、ユーザーごとの最新のシステム フォント設定が格納されます。
FontUpdater
は、signature|privileged
権限チェックによって信頼される、プラグイン可能なフォント アップデータです。FontUpdater
は FontManagerService
と通信して、現在のシステム フォント設定を取得、インストール、削除、更新します。FontUpdater
は、プロセス間通信(IPC)メカニズムを使用して新しいフォント ファイルのコンテンツを渡すことができます。FontManagerService
は、/data/fonts
ファイルなど、誰でも読み取れるストレージにコンテンツを保存します。このストレージは保護されます。SELinux ポリシーの制約により、FontManagerService
のみがこのストレージに書き込みを行えます。
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。詳細については、
については、以下をご覧ください。
OpenType Variable Font API の改善
および buildVariableFamily
。
フォントをカスタマイズする
一部の OEM は、自社のブランドを表現するために AOSP でフォント ファイルをインストールまたは置換します。Android 12 はこの機能をサポートしていますが、デバイスで絵文字フォントを更新するための要件が追加されています。絵文字フォント ファイルの変更や更新を行わない OEM の場合、この機能を使用する必要はありません。
Google がフォント ファイル(特に NotoColorEmoji
ファイル)を GMS で更新する
そのため、NotoColorEmoji.ttf
ファイルは、変更または削除しないでください。
/system
パーティションから削除し、パーティションから
/frameworks/base/data/fonts/fonts.xml
。
フォントをカスタマイズする方法は 3 つあります。
NotoColorEmoji.ttf
ファイルを OEM ブランドの絵文字フォントに置き換える。- 地域のニーズに応じて
NotoColorEmoji.ttf
ファイルを変更する。 - 他のフォント ファイルを置換または変更する。
AOSP で絵文字フォントを変更していない場合は、何もする必要はありません。絵文字フォントをカスタマイズする場合は、この後のセクションの手順を行ってください。
NotoColorEmoji.ttf を OEM ブランドの絵文字フォントに置き換える
NotoColorEmoji.ttf
ファイルを OEM ブランドの絵文字フォント ファイルに置き換えるには、フォントの代替チェーンの直前に絵文字フォントを配置します。
- 独自のフォント(
OEMCustomEmoji.ttf
)を/system
パーティションに配置します。 /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 を変更する
次の手順に沿って、地域市場のニーズに合わせてカスタマイズします。
- 別の名前(
Modified\_NotoColorEmoji.ttf
など)で独自のNotoColorEmoji
ファイルを作成します。 - 元の
NotoColorEmoji.ttf
ファイルの前に配置してください。
ステップ 2 を実行すると、元の NotoColorEmoji.ttf
の代わりに、Modified\NotoColorEmoji.ttf
でサポートされている修正されたグリフが表示されます。Google では次のことをおすすめします。
- このフォントには必要なグリフのみを含めます。
- 修正されていないグリフを元の
NotoColorEmoji.ttf
ファイルに委任して、デバイスが今後の絵文字リリースでデザインの修正を受けられるようにします。
グリフを削除する: NotoColorEmoji.ttf
ファイルからグリフを削除するには、ステップ 1 と 2 に沿って、cmap で glyph ID = 0
を指定します。
リージョン フラグを使用する: ターゲット グリフがリージョン フラグの場合は、グリフ ID を不明な国コードとして指定します(country code = "ZZ"
を使用します)
トウフグリフを作成する: トウフグリフを使用する場合、そのグリフの ID を明示的に指定できます。glyphID = 0
を指定すると、関連付けられているアプリは「グリフが利用できない」と解釈します。たとえば、この属性を使用すると、Paint#hasGlyph
アプリは false
を返します。
他のフォント ファイルを置換または変更する
他のフォントを置き換えるか変更する場合、カスタマイズの方法は、地域市場のニーズに応じて TTF ファイルを変更する場合と同様です。実行時に AOSP で更新された不明なフォント ファイルは無視され、更新されません。デバイス内の不明なフォントは Google によって無視されます。これには、AOSP で元のフォントから変更されたフォント ファイルが含まれます。
フォントの更新は Google により GMS Core で行われますが、一般的なフォントの更新メカニズムはすべての OEM が利用できます。OEM は、前提条件を満たす、フォント ファイルに署名する、ランタイムでフォントを更新するの手順に沿って、追加のフォント アップデータをインストールできます。
前提条件を満たす
フォントの更新メカニズムでは、fs-verity
Linux カーネル機能を使用します。デバイスが fs-verity
に準拠していることを確認し、デバイスに証明書を含めます。
フォント ファイルに署名する
フォント ファイルはリスクのあるリソースであるため、信頼されたキーで検証する必要があります。更新するすべてのフォント ファイルを慎重に確認し、秘密鍵で署名します。署名は fs-verity
と互換性がある必要があります。
ランタイムでフォントを更新する
FontManager
システムアプリがフォントの更新を行います。FontManager
アプリ
インストールされている最新のシステム フォントのステータスと、フォントを更新する機能を提供します。
署名付きのファイルが生成されます。更新アプリを呼び出すには、
UPDATE_FONT signature|privileged
権限を
アプリの許可リスト、
マニフェストに追加します。
アプリの更新機能に UPDATE_FONT signature|privileged
権限を付与します。