Android 11以前では、AOSP( /system/fonts
パーティション内)またはベンダーパーティション( /product/fonts
または/system/fonts
パーティション内)のデバイスにインストールされたフォントファイルを更新するには、OEMからのシステム更新が必要です。この要件は、絵文字の互換性に大きな影響を与えます。 Android 12では、 FontManager
システムサービスを使用して、インストールされているフォントファイルを管理し、システムを更新せずにデバイスにインストールされているフォントファイルを更新できます。
Android 12は、3つのプロセスインタラクションを備えています。 FontManagerService
、 Font Updater
、およびApplication
。
FontManagerService
は、システムサーバーの中央管理システムです。 FontManagerService
は、最新のユーザーごとのシステムフォント設定を保存します。
FontUpdater
は、 signature|privileged
権限チェックによって信頼されるプラグ可能なフォントアップデーターです。 FontUpdater
はFontManagerService
と通信して、現在のシステムフォント設定を取得、インストール、削除、または更新します。 FontUpdater
は、プロセス間通信(IPC)メカニズムによって新しいフォントファイルの内容を渡すことができます。 FontManagerService
は、コンテンツを/data/fonts
ファイルなどの誰でも読み取り可能な保存場所に保存します。このストレージは保護されています。これは、 FontManagerService
によってのみ、SELinuxポリシーによって記述できます。
Application
クラスが起動すると、 bindApplication
メソッドの引数としてシステムフォント設定が渡されます。次に、アプリケーションプロセスで使用するフォント設定を初期化します。
カスタムフォントの実装
一部のOEMは、ブランドを表示するためにAOSPにフォントファイルをインストールまたは置換します。 Android 12はこの機能をサポートしていますが、デバイスで絵文字フォントを最新の状態に保つための要件が追加されています。絵文字フォントファイルを変更または更新しないOEMは、この機能を使用する必要はありません。
Googleはフォントファイル、特にGMS Coreを介してNotoColorEmoji
ファイルを更新するため、 NotoColorEmoji.ttf
ファイルを/system
パーティションから変更または削除したり、/ system / etc /system/etc/fonts.xml
から削除したりしないでください。フォントをカスタマイズする次の3つの方法に注意してください。
-
NotoColorEmoji.ttf
ファイルをOEMブランドの絵文字フォントに置き換えます。 - ローカル市場のニーズに合わせて
NotoColorEmoji.ttf
ファイルを変更します。 - 他のフォントファイルを置き換えるか変更します。
AOSPで絵文字フォントを変更していない場合は、アクションを実行する必要はありません。絵文字フォントをカスタマイズする場合は、次のセクションの手順を使用してください。
NotoColorEmoji.ttfをOEMブランドの絵文字フォントに置き換える
NotoColorEmoji.ttf
ファイルをOEMブランドの絵文字フォントファイルに置き換えるには、フォントフォールバックチェーンの直前に絵文字フォントを配置します。
-
/system
パーティションにOEMCustomEmoji.ttf
という独自のフォントを配置します。 次のコードのように
/system/etc/fonts.xml
を変更します。<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を実行すると、元の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
を返します。
他のフォントファイルを置き換えるか変更する
他のフォントを置き換えたり変更したりするためのカスタマイズは、ローカル市場のニーズに合わせてtff
ファイルを変更する場合と同様です。実行時にAOSPで更新される不明なフォントファイルは無視され、更新されません。 Googleはデバイス内の不明なフォントを無視します。これには、AOSPの元のフォントから変更されたフォントファイルが含まれます。
フォントの更新はGMSCoreでGoogleによって行われますが、一般的なフォントの更新メカニズムはすべてのOEMに公開されています。 OEMは、前提条件の満たし、フォントファイルへの署名、およびランタイムフォント更新の作成の手順を使用して、追加のフォントアップデータをインストールできます。
前提条件を満たしている
フォント更新メカニズムは、 fs-verity
カーネル機能を使用します。デバイスがfs-verity
に準拠していることを確認し、デバイスに証明書を含めます。
フォントファイルへの署名
フォントファイルは危険なリソースであるため、信頼できるキーで検証する必要があります。更新するすべてのフォントファイルを注意深く確認し、秘密鍵で署名します。署名はfs-verity
と互換性がある必要があります。
ランタイムフォントの更新
FontManger
システムアプリはフォントの更新を実行します。 FontManager
アプリは、最新のインストール済みシステムフォントステータスと、署名付きのフォントファイルを更新する機能を提供します。更新アプリを呼び出すには、 UPDATE_FONT signature|privileged
権限をアプリの許可リストとマニフェストに追加します。
アプリのアップデーター関数にUPDATE_FONT signature|privileged
を付与します。