Implementieren Sie benutzerdefinierte Schriftarten

In Android 11 und niedriger erfordert die Aktualisierung der vom Gerät installierten Schriftartdateien in AOSP (in der /system/fonts Partition) oder den Herstellerpartitionen (in den /product/fonts oder /system/fonts Partitionen) ein Systemupdate vom OEM. Diese Anforderung hat erhebliche Auswirkungen auf die Emoji-Kompatibilität. In Android 12 können Sie den FontManager Systemdienst verwenden, um installierte Schriftartdateien zu verwalten und auf dem Gerät installierte Schriftartdateien ohne Systemaktualisierung zu aktualisieren.

Android 12 bietet drei Prozessinteraktionen; FontManagerService , Font Updater und Application .

Der FontManagerService ist das zentrale Verwaltungssystem im Systemserver. FontManagerService speichert die neuesten Systemschrifteinstellungen pro Benutzer.

Der FontUpdater ist ein steckbarer Font-Updater, der durch eine signature|privileged Berechtigungsprüfung als vertrauenswürdig eingestuft wird. Der FontUpdater kommuniziert mit dem FontManagerService , um aktuelle Systemschrifteinstellungen abzurufen, zu installieren, zu entfernen oder zu aktualisieren. Der FontUpdater kann neue Schriftartdateiinhalte durch IPC-Mechanismen (Inter-Process Communications) übergeben. Der FontManagerService speichert den Inhalt an einem allgemein lesbaren Speicherort, beispielsweise in den /data/fonts Dateien. Dieser Speicher ist bewacht. Es kann nur mit dem FontManagerService und der SELinux-Richtlinie geschrieben werden.

Wenn die Application Klasse gestartet wird, übergibt sie die Systemschriftarteinstellungen als Argumente der bindApplication Methode. Anschließend werden die Schriftarteinstellungen für die Verwendung durch den App-Prozess initialisiert.

Schriftarten anpassen

Einige OEMs installieren oder ersetzen Schriftartdateien in AOSP, um ihre Marken anzuzeigen. Android 12 unterstützt diese Funktionalität, fügt jedoch Anforderungen hinzu, um Emoji-Schriftarten auf Geräten auf dem neuesten Stand zu halten. OEMs, die Emoji-Schriftartendateien nicht ändern oder aktualisieren, müssen diese Funktion nicht verwenden.

Google aktualisiert die Schriftartdateien, insbesondere die NotoColorEmoji Dateien, über GMS Core. Ändern oder entfernen Sie daher die Datei NotoColorEmoji.ttf nicht aus der /system Partition und entfernen Sie sie nicht aus /system/etc/fonts.xml . Beachten Sie die folgenden drei Möglichkeiten, wie Sie Ihre Schriftarten anpassen können :

  1. Ersetzen Sie die Datei NotoColorEmoji.ttf durch eine Emoji-Schriftart der OEM-Marke.
  2. Ändern Sie die Datei NotoColorEmoji.ttf entsprechend Ihren lokalen Marktanforderungen.
  3. Ersetzen oder ändern Sie andere Schriftartdateien.

Wenn Sie Emoji-Schriftarten in AOSP nicht ändern, müssen Sie nichts unternehmen. Wenn Sie Emoji-Schriftarten anpassen möchten, befolgen Sie die Anweisungen in den folgenden Abschnitten.

Ersetzen Sie NotoColorEmoji.ttf durch Emoji-Schriftarten der OEM-Marke

Um die Datei NotoColorEmoji.ttf durch Ihre OEM-Emoji-Schriftartdatei zu ersetzen, platzieren Sie die Emoji-Schriftart direkt vor der Schriftart-Fallback-Kette:

  1. Platzieren Sie Ihre eigene Schriftart namens OEMCustomEmoji.ttf in der /system Partition.
  2. Ändern Sie /system/etc/fonts.xml wie im folgenden Code:

    <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>
    

Ändern Sie NotoColorEmoji.ttf für lokale Marktanforderungen

Befolgen Sie diese Schritte, um es an Ihre lokalen Marktanforderungen anzupassen:

  1. Erstellen Sie Ihre eigene NotoColorEmoji Datei mit einem anderen Namen; Nennen Sie es beispielsweise Modified\_NotoColorEmoji.ttf .
  2. Platzieren Sie es vor der Originaldatei NotoColorEmoji.ttf .

Nachdem Sie Schritt 2 ausgeführt haben, wird das von Modified\NotoColorEmoji.ttf unterstützte geänderte Glyph anstelle des ursprünglichen NotoColorEmoji.ttf angezeigt. Google empfiehlt Folgendes:

  • Verfügen Sie nur über die erforderliche Glyphe in dieser Schriftart.
  • Delegieren Sie unveränderte Glyphen an die ursprüngliche NotoColorEmoji.ttf Datei, damit Ihre Geräte alle Designkorrekturen erhalten, die in zukünftigen Emoji-Versionen vorgenommen werden.

Glyphen entfernen: Um Glyphen aus der Datei NotoColorEmoji.ttf zu entfernen, führen Sie die Schritte 1 und 2 aus und geben Sie in Ihrer cmap glyph ID = 0 an.

Verwenden Sie eine regionale Flagge: Wenn es sich bei der Zielglyphe um eine regionale Flagge handelt, geben Sie die Glyphen-ID als unbekannten Ländercode an. (Verwenden Sie country code = "ZZ" .)

Erstellen Sie eine Tofu-Glyphe: Sie können explizit eine Tofu-Glyphen-ID angeben, wenn Sie eine verwenden möchten. Wenn Sie glyphID = 0 angeben, interpretiert die zugehörige App dies als „Glyphe ist nicht verfügbar“. Wenn Sie beispielsweise dieses Attribut verwenden, gibt die Paint#hasGlyph -App false zurück.

Ersetzen oder ändern Sie andere Schriftartdateien

Um andere Schriftarten zu ersetzen oder zu ändern, erfolgt die Anpassung ähnlich wie bei der Änderung der TTF-Dateien für lokale Marktanforderungen. Unbekannte Schriftartdateien, die zur Laufzeit im AOSP aktualisiert werden, werden ignoriert und nicht aktualisiert. Google ignoriert unbekannte Schriftarten auf Ihrem Gerät. Dazu gehören Schriftartdateien, die gegenüber den ursprünglichen Schriftarten in AOSP geändert wurden.

Obwohl Schriftartenaktualisierungen von Google in GMS Core durchgeführt werden, steht der allgemeine Mechanismus zur Schriftartenaktualisierung allen OEMs offen. OEMs können mithilfe der Schritte unter „Voraussetzungen erfüllen“ , „Schriftartendateien signieren “ und „Laufzeit-Schriftartaktualisierungen durchführen“ zusätzliche Schriftaktualisierungsprogramme installieren.

Erfüllen Sie die Voraussetzungen

Der Schriftartaktualisierungsmechanismus verwendet die Linux-Kernelfunktion fs-verity . Stellen Sie sicher, dass Ihr Gerät fs-verity kompatibel ist, und legen Sie das Zertifikat in Ihr Gerät ein.

Schriftdateien signieren

Da es sich bei Schriftartdateien um riskante Ressourcen handelt, müssen sie mit vertrauenswürdigen Schlüsseln überprüft werden. Überprüfen Sie sorgfältig alle Schriftartdateien, die aktualisiert werden sollen, und signieren Sie mit Ihrem privaten Schlüssel. Die Signatur muss fs-verity kompatibel sein.

Nehmen Sie Schriftartaktualisierungen zur Laufzeit vor

Die FontManger System-App führt Schriftartaktualisierungen durch. Die FontManager App bietet den neuesten Status der installierten Systemschriftarten und die Möglichkeit, Schriftdateien mit Signaturen zu aktualisieren. Um Update-Apps aufzurufen, fügen Sie die UPDATE_FONT signature|privileged Berechtigung zu Ihrer App-Zulassungsliste und zu Ihrem Manifest hinzu.

Erteilen Sie der Aktualisierungsfunktion Ihrer App die UPDATE_FONT signature|privileged Berechtigung.