Benutzerdefinierte Schriftarten implementieren

Ab Android 15 werden variable Schriftarten mit höherer Effizienz und Detailgenauigkeit zur Laufzeit gerendert. Mit diesem Update müssen Anbieter neue Konfigurationen für variable Schriftarten font_fallback.xml hinzufügen, anstatt fonts.xml, da fonts.xml eingestellt wird. Weitere Informationen finden Sie unter Unterstützung für variable Schriftarten.

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

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

Der FontManagerService ist das zentrale Verwaltungssystem auf dem Systemserver. FontManagerService speichert die neuesten Systemschrifteinstellungen pro Nutzer.

Der FontUpdater ist ein Plug-in-Schriftarten-Updater, der durch eine signature|privileged-Berechtigungsprüfung als vertrauenswürdig eingestuft wird. Die FontUpdater kommuniziert mit der FontManagerService, um die aktuellen Systemschrifteinstellungen abzurufen, zu installieren, zu entfernen oder zu aktualisieren. Der FontUpdater kann den Inhalt neuer Schriftdateien über IPC-Mechanismen (Inter-Process Communication) übergeben. Die FontManagerService speichert den Inhalt an einem für alle lesbaren Speicherort, z. B. in den /data/fonts-Dateien. Dieser Speicher ist bewacht. Sie kann nur von FontManagerService geschrieben werden, gemäß der SELinux-Richtlinie.

Wenn die Application-Klasse gestartet wird, werden die Systemschrifteinstellungen als Argumente der bindApplication-Methode übergeben. Anschließend werden die Schrifteinstellungen für die Verwendung durch den App-Prozess initialisiert.

Unterstützung für variable Schriftarten

Ab Android 15 werden Konfigurationen für variable Schriftarten in font_fallback.xml im folgenden Format angegeben:

<family lang="und-Ethi" supportedAxes="wght,ital">
    <font>NotoSansEthiopic-VF.ttf</font>
</family>

In diesem Format hat eine variable Schrift alle Attribute einer statischen Schrift mit einem zusätzlichen supportedAxes-Attribut. Ein supportedAxes-Attribut ist eine durch Kommas getrennte Liste der unterstützten Achsen-Tags. Unter Android 15 können nur die Achsen wght und ital angegeben werden.

Wenn das supportedAxes-Attribut nicht angegeben ist, dient der font-Knoten als statischer Schriftschnitt einer einzelnen Instanz einer variablen Schrift, die mit axis-Untergeordneten angegeben ist.

Wenn das Attribut supportedAxes angegeben ist, erstellt das System zur Laufzeit dynamisch eine Schriftschnittinstanz für die angegebenen Gewichts- und Stilwerte.

Entwickler können die android.graphics.fonts.SystemFonts#getAvailableFonts-Java API oder die ASystemFontIterator_open-NDK API verwenden, um eine Liste der vom System installierten Schriftdateien abzurufen. Informationen zu Entwickler-APIs, die dieses Update unterstützen, finden Sie unter Verbesserte OpenType Variable Font API und buildVariableFamily.

Schriftarten anpassen

Einige OEMs installieren oder ersetzen Schriftdateien in AOSP, um ihre Marken zu präsentieren. Android 12 unterstützt diese Funktion, stellt aber Anforderungen an die Aktualisierung von Emoji-Schriftarten auf Geräten. OEMs, die Emoji-Schriftdateien nicht ändern oder aktualisieren, müssen diese Funktion nicht verwenden.

Google aktualisiert die Schriftdateien, insbesondere die NotoColorEmoji-Dateien, über GMS Core. Ändern oder entfernen Sie die NotoColorEmoji.ttf-Datei daher nicht aus der Partition /system und auch nicht aus /frameworks/base/data/fonts/fonts.xml. Es gibt drei Möglichkeiten, Schriftarten anzupassen:

  1. Ersetzen Sie die Datei NotoColorEmoji.ttf durch eine Emoji-Schriftart mit OEM-Markenbezug.
  2. Passen Sie die NotoColorEmoji.ttf-Datei an die Anforderungen Ihres lokalen Marktes an.
  3. Andere Schriftdateien ersetzen oder ändern

Wenn Sie Emoji-Schriftarten in AOSP nicht ändern, müssen Sie nichts unternehmen. Wenn Sie Emoji-Schriftarten anpassen möchten, folgen Sie der Anleitung in den folgenden Abschnitten.

NotoColorEmoji.ttf durch Emoji-Schriftarten des OEMs ersetzen

Wenn Sie die Datei NotoColorEmoji.ttf durch Ihre Emoji-Schriftartdatei mit OEM-Marke ersetzen möchten, platzieren Sie die Emoji-Schriftart direkt vor der Schriftarten-Fallback-Kette:

  1. Platzieren Sie Ihre eigene Schriftart mit dem Namen OEMCustomEmoji.ttf in der Partition /system.
  2. Ändern Sie /frameworks/base/data/fonts/fonts.xml (und /frameworks/base/data/fonts/font-fallback.xml in Android 15 und höher) 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>
    

NotoColorEmoji.ttf für die Anforderungen lokaler Märkte anpassen

So passen Sie die Vorlage an die Anforderungen Ihres lokalen Marktes an:

  1. Erstellen Sie eine eigene NotoColorEmoji-Datei mit einem anderen Namen, z. B. Modified\_NotoColorEmoji.ttf.
  2. Platzieren Sie sie vor der ursprünglichen NotoColorEmoji.ttf-Datei.

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

  • Nur das erforderliche Zeichen in dieser Schriftart haben.
  • Weisen Sie unveränderte Glyphen der ursprünglichen NotoColorEmoji.ttf-Datei zu, damit Ihre Geräte alle Designfehler erhalten, die in zukünftigen Emoji-Releases behoben werden.

Glyphe entfernen:Wenn Sie Glyphen aus der NotoColorEmoji.ttf-Datei entfernen möchten, führen Sie die Schritte 1 und 2 aus und geben Sie glyph ID = 0 in Ihrer CMAP an.

Regionale Flagge verwenden:Wenn das Ziel-Glyph ein regionales Symbol ist, geben Sie die Glyph-ID als unbekannten Ländercode an. (Verwenden Sie country code = "ZZ".)

Tofu-Glyph erstellen:Sie können eine Tofu-Glyph-ID angeben, wenn Sie eine verwenden möchten. Wenn Sie glyphID = 0 angeben, wird das von der entsprechenden App als „Glyph ist nicht verfügbar“ interpretiert. Wenn Sie dieses Attribut beispielsweise verwenden, gibt die Paint#hasGlyph-App false zurück.

Andere Schriftdateien ersetzen oder ändern

Wenn Sie andere Schriftarten ersetzen oder ändern möchten, erfolgt die Anpassung ähnlich wie bei der Anpassung der TTF-Dateien an die Anforderungen des lokalen Marktes. Unbekannte Schriftdateien, die während der Laufzeit im AOSP aktualisiert werden, werden ignoriert und nicht aktualisiert. Unbekannte Schriftarten auf Ihrem Gerät werden von Google ignoriert. Dazu gehören auch Schriftdateien, die aus den ursprünglichen Schriftarten in AOSP geändert wurden.

Schriftartupdates werden zwar von Google in GMS Core durchgeführt, der allgemeine Mechanismus für Schriftartupdates steht jedoch allen OEMs zur Verfügung. OEMs können zusätzliche Schriftart-Aktualisierungsprogramme installieren. Folgen Sie dazu der Anleitung unter Voraussetzungen erfüllen, Schriftdateien signieren und Schriftarten in der Laufzeit aktualisieren.

Voraussetzungen erfüllen

Der Mechanismus zum Aktualisieren von Schriftarten verwendet die Linux-Kernelfunktion fs-verity. Prüfen Sie, ob Ihr Gerät fs-verity-konform ist, und fügen Sie das Zertifikat auf Ihrem Gerät hinzu.

Schriftartendateien für Unterschriften

Da Schriftdateien riskante Ressourcen sind, müssen sie mit vertrauenswürdigen Schlüsseln überprüft werden. Prüfen Sie alle Schriftdateien, die aktualisiert werden sollen, sorgfältig und signieren Sie sie mit Ihrem privaten Schlüssel. Die Signatur muss mit fs-verity kompatibel sein.

Laufzeitschriftarten aktualisieren

Die System-App FontManager führt Schriftartupdates aus. Die FontManager App zeigt den Status der aktuell installierten Systemschriftart an und bietet die Möglichkeit, Schriftdateien mit Signaturen zu aktualisieren. Wenn Sie Apps aktualisieren möchten, fügen Sie die Berechtigung UPDATE_FONT signature|privileged zur Zulassungsliste für Apps und zum Manifest hinzu.

Gewähren Sie der Aktualisierungsfunktion Ihrer App die Berechtigung UPDATE_FONT signature|privileged.