Benutzerdefinierte Schriftarten implementieren

Ab Android 15 werden variable Schriftarten zur Laufzeit effizienter und mit besserer Granularität gerendert. Mit diesem Update müssen Anbieter neue Konfigurationen für variable Schriftarten in font_fallback.xml anstelle von fonts.xml hinzufügen, da fonts.xml eingestellt wird. Weitere Informationen finden Sie unter Unterstützung von variablen Schriftarten.

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

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

FontManagerService ist das zentrale Verwaltungssystem auf dem Systemserver. In FontManagerService werden die aktuellen Systemeinstellungen für die Schriftart pro Nutzer gespeichert.

FontUpdater ist ein modulares Schriftart-Update-Tool, das durch eine signature|privileged-Berechtigungsprüfung als vertrauenswürdig eingestuft wird. Das FontUpdater kommuniziert mit dem FontManagerService, um die aktuellen Einstellungen für die Systemschriftart abzurufen, zu installieren, zu entfernen oder zu aktualisieren. Die FontUpdater kann neue Schriftartdateiinhalte über IPC-Mechanismen (Inter-Process Communication) übergeben. Mit FontManagerService werden die Inhalte an einem öffentlich lesbaren Speicherort gespeichert, z. B. in den /data/fonts-Dateien. Dieser Speicher ist geschützt. Sie kann nur von der FontManagerService durch die SELinux-Richtlinie geschrieben werden.

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 Font alle Attribute einer statischen Schriftart mit einem zusätzlichen supportedAxes-Attribut. Ein supportedAxes-Attribut ist eine durch Kommas getrennte Liste der unterstützten Achsentags. In Android 15 können nur die Achsen wght und ital angegeben werden.

Wenn das Attribut supportedAxes nicht angegeben ist, funktioniert der Knoten font als statische Schriftart einer einzelnen Instanz einer variablen Schriftart, die mit untergeordneten axis-Elementen angegeben wird.

Wenn das Attribut supportedAxes angegeben ist, erstellt das System zur Laufzeit dynamisch eine Schriftartinstanz für den angegebenen Wert für „weight“ (Gewichtung) und „style“ (Stil).

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

Schriftarten anpassen

Einige OEMs installieren oder ersetzen Schriftartdateien in AOSP, um ihre Marken zu präsentieren. Android 12 unterstützt diese Funktion, stellt aber zusätzliche Anforderungen, damit Emoji-Schriftarten auf Geräten immer auf dem neuesten Stand sind. OEMs, die Emoji-Schriftartdateien 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 die NotoColorEmoji.ttf-Datei daher nicht aus der /system-Partition und entfernen Sie sie nicht aus /frameworks/base/data/fonts/fonts.xml. Es gibt drei Möglichkeiten, Ihre Schriftarten anzupassen:

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

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

NotoColorEmoji.ttf durch OEM-gebrandete Emoji-Schriftarten ersetzen

Wenn Sie die Datei NotoColorEmoji.ttf durch Ihre OEM-Datei mit Emoji-Schriftarten ersetzen möchten, fügen Sie die Emoji-Schriftart direkt vor der Schriftart-Fallbackkette ein:

  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 lokale Marktanforderungen anpassen

So passen Sie die Lösung an die Anforderungen Ihres lokalen Markts 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 anstelle des ursprünglichen NotoColorEmoji.ttf das von Modified\NotoColorEmoji.ttf unterstützte geänderte Glyphen angezeigt. Google empfiehlt Folgendes:

  • Diese Schriftart enthält nur das erforderliche Glyphe.
  • Weisen Sie unveränderte Glyphen der ursprünglichen NotoColorEmoji.ttf-Datei zu, damit Ihre Geräte alle Designkorrekturen erhalten, die in zukünftigen Emoji-Releases vorgenommen werden.

Glyphen entfernen:Wenn Sie Glyphen aus der NotoColorEmoji.ttf-Datei entfernen möchten, folgen Sie Schritt 1 und 2 und geben Sie glyph ID = 0 in Ihrer cmap an.

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

Tofu-Glyphe erstellen: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 das als „Glyphe nicht verfügbar“. Wenn Sie dieses Attribut beispielsweise verwenden, gibt die Paint#hasGlyph-App false zurück.

Andere Schriftartdateien ersetzen oder ändern

Wenn Sie andere Schriftarten ersetzen oder ändern möchten, ist die Vorgehensweise ähnlich wie beim Ändern der TTF-Dateien für die Anforderungen des lokalen Markts. Unbekannte Schriftartdateien, die in der AOSP zur Laufzeit aktualisiert werden, werden ignoriert und nicht aktualisiert. Google ignoriert unbekannte Schriftarten auf Ihrem Gerät. Dazu gehören auch Schriftartdateien, die gegenüber den Originalschriftarten in AOSP geändert wurden.

Schriftart-Updates werden zwar von Google in GMS Core durchgeführt, der allgemeine Mechanismus für Schriftart-Updates steht jedoch allen OEMs offen. OEMs können zusätzliche Schriftart-Updater installieren, indem sie die Schritte unter Voraussetzungen erfüllen, Schriftartdateien signieren und Laufzeit-Schriftart-Updates vornehmen ausführen.

Voraussetzungen erfüllen

Für die Aktualisierung von Schriftarten wird die Linux-Kernelfunktion fs-verity verwendet. Vergewissern Sie sich, dass Ihr Gerät fs-verity-konform ist, und fügen Sie das Zertifikat in Ihr Gerät ein.

Schriftartendateien signieren

Da Schriftartdateien riskante Ressourcen sind, müssen sie mit vertrauenswürdigen Schlüsseln überprüft werden. Prüfen Sie alle Schriftartdateien, 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 Schriftart-Updates durch. Die FontManager App bietet den neuesten Status der installierten Systemschriftarten und die Möglichkeit, Schriftartdateien mit Signaturen zu aktualisieren. Wenn Sie Apps aktualisieren möchten, fügen Sie die Berechtigung UPDATE_FONT signature|privileged Ihrer Zulassungsliste für Apps und Ihrem Manifest hinzu.

Geben Sie der Updater-Funktion Ihrer App die Berechtigung UPDATE_FONT signature|privileged.