Implémenter des polices personnalisées

À partir d'Android 15, les polices variables s'affichent de l'environnement d'exécution avec une efficacité et une précision accrues. Avec cette mise à jour, les fournisseurs doivent ajouter de nouvelles configurations de police variables à font_fallback.xml au lieu de fonts.xml, car fonts.xml est en cours d'abandon. Pour en savoir plus, consultez la section Compatibilité avec les polices variables.

Sous Android 11 et versions antérieures, la mise à jour des fichiers de police installés sur l'appareil dans AOSP (dans le /system/fonts) ou les partitions du fournisseur (dans le fichier /product/fonts ou /system/fonts) nécessite une mise à jour du système de l'OEM. Ce a un impact significatif sur la compatibilité avec les emoji. Dans Android 12, vous pouvez utiliser le système FontManager service permettant de gérer les fichiers de polices installées et de mettre à jour ceux installés sur l'appareil sans mise à jour du système.

Android 12 propose trois interactions de processus : FontManagerService, Font Updater et Application.

FontManagerService est le système de gestion central du serveur système. FontManagerService stocke les derniers paramètres de police système par utilisateur.

FontUpdater est un outil de mise à jour de police connectable, approuvé par un Vérification des autorisations signature|privileged. Le FontUpdater communique avec FontManagerService pour obtenir, installer, supprimer ou mettre à jour la police système actuelle paramètres. FontUpdater peut transmettre le contenu d'un nouveau fichier de police par inter-processus et des mécanismes de communication (IPC). Le FontManagerService enregistre le contenu dans un emplacement de stockage lisible par tous, comme dans les fichiers /data/fonts. Ce le stockage est protégé. Il peut être écrit uniquement par le FontManagerService, par Règles de SELinux

Lorsque la classe Application est lancée, elle transmet les paramètres de police système en tant que les arguments de la méthode bindApplication ; puis il initialise les paramètres de police pour être utilisées par le processus d'application.

Compatibilité avec les polices variables

À partir d'Android 15, les configurations de police variable sont spécifié dans font_fallback.xml en utilisant le format suivant:

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

Dans ce format, une police variable possède tous les attributs d'une police statique avec un attribut supportedAxes supplémentaire. Un attribut supportedAxes est un une liste des balises d'axe acceptées séparées par une virgule. Avec Android 15, seuls les axes wght et ital peuvent être spécifié.

Si l'attribut supportedAxes n'est pas spécifié, le nœud font fonctionne comme police statique d'une seule instance d'une police variable spécifiée avec axis enfants.

Si l'attribut supportedAxes est spécifié, le système crée un objet instance de police pour l'épaisseur et la valeur de style données lors de l'exécution.

Les développeurs peuvent utiliser la android.graphics.fonts.SystemFonts#getAvailableFonts API Java ou ASystemFontIterator_open API NDK pour obtenir la liste des fichiers de polices installés par le système Pour plus d'informations sur de développement compatibles avec cette mise à jour, consultez API OpenType Variable Font améliorée et buildVariableFamily.

Personnaliser les polices

Certains OEM installent ou remplacent les fichiers de police dans AOSP pour afficher leurs marques. Android 12 est compatible avec cette fonctionnalité, mais ajoute exigences pour maintenir à jour les polices emoji sur les appareils. qui n'apportent aucune modification mettre à jour les fichiers de police des emoji, cette fonctionnalité n'est pas nécessaire.

Google met à jour les fichiers de police, en particulier les fichiers NotoColorEmoji via GMS. Core. Par conséquent, ne modifiez pas et ne supprimez pas le fichier NotoColorEmoji.ttf de la /system, et ne la supprimez pas /frameworks/base/data/fonts/fonts.xml Notez les trois façons suivantes de personnaliser vos polices:

  1. Remplacez le fichier NotoColorEmoji.ttf par une police d'emoji de la marque OEM.
  2. Modifiez le fichier NotoColorEmoji.ttf en fonction des besoins de votre marché local.
  3. Remplacer ou modifier d'autres fichiers de police

Si vous ne modifiez pas les polices emoji dans AOSP, aucune action n'est requise de votre part. Si vous souhaitez personnaliser les polices emoji, suivez les instructions ci-dessous .

Remplacement du fichier NotoColorEmoji.ttf par des polices d'emoji de marques OEM

Pour remplacer le fichier NotoColorEmoji.ttf par le fichier de polices d'emoji de votre OEM, procédez comme suit : placez la police de l'emoji juste avant la chaîne de remplacement de la police:

  1. Placez votre propre police, appelée OEMCustomEmoji.ttf, dans la partition /system.
  2. Modifiez /frameworks/base/data/fonts/fonts.xml (et /frameworks/base/data/fonts/font-fallback.xml po Android 15 ou version ultérieure), comme dans le code suivant:

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

Modification du fichier NotoColorEmoji.ttf pour les besoins du marché local

Suivez les étapes ci-dessous pour personnaliser votre expérience en fonction des besoins de votre marché local:

  1. Créez votre propre fichier NotoColorEmoji avec un nom différent. Exemple : Nommez-la Modified\_NotoColorEmoji.ttf.
  2. Placez-le avant le fichier NotoColorEmoji.ttf d'origine.

Après avoir effectué l'étape 2, le glyphe modifié compatible avec Modified\NotoColorEmoji.ttf s'affiche au lieu de NotoColorEmoji.ttf. Voici nos recommandations:

  • Cette police ne comporte que le glyphe nécessaire.
  • Déléguez les glyphes non modifiés au fichier NotoColorEmoji.ttf d'origine pour que vos appareils recevront les corrections apportées à l'apparence dans les prochaines versions d'emoji.

Supprimer des glyphes:pour supprimer des glyphes du fichier NotoColorEmoji.ttf, suivez les étapes 1 et 2, et spécifiez glyph ID = 0 dans votre carte cmap.

Utilisez un indicateur régional:si le glyphe cible est un indicateur régional, spécifiez ID du glyphe sous la forme d'un code pays inconnu. (Utilisez country code = "ZZ".)

Créer un glyphe de tofu:vous pouvez spécifier explicitement un ID de glyphe de tofu si vous le souhaitez pour en utiliser une. Lorsque vous spécifiez glyphID = 0, l'application associée l'interprète comme "Le glyphe n'est pas disponible." Par exemple, lorsque vous utilisez cet attribut, L'application Paint#hasGlyph renvoie false.

Remplacer ou modifier d'autres fichiers de police

Pour remplacer ou modifier d'autres polices, la personnalisation est semblable à celle de modifier les fichiers TTF pour les besoins du marché local. Fichiers de police inconnus qui sont mis à jour dans AOSP au moment de l'exécution sont ignorés et ne sont pas mis à jour. Google ignore des polices inconnues sur votre appareil. Cela inclut les fichiers de police qui ont été modifiés à partir de les polices d'origine dans AOSP.

Bien que les mises à jour de police soient effectuées par Google dans GMS Core, la mise à jour générale est ouvert à tous les OEM. Les OEM peuvent installer d'autres programmes de mise à jour des polices suivez la procédure décrite dans Conditions préalables à l'utilisation du service, Signer des fichiers de police. et Mettre à jour les polices au moment de l'exécution.

Répondre aux prérequis

Le mécanisme de mise à jour des polices utilise la fonctionnalité de noyau Linux fs-verity. Vérifiez que votre appareil est conforme à la norme fs-verity et inclut le certificat dans votre appareil.

Signer les fichiers de police

Les fichiers de police étant des ressources à risque, ils doivent être validés à l'aide de clés approuvées. Examinez attentivement tous les fichiers de police à mettre à jour et signez avec votre clé privée. La signature doit être compatible avec fs-verity.

Mettre à jour les polices d'exécution

L'application système FontManager effectue des mises à jour des polices. L'application FontManager fournit l'état des polices système installées le plus récent et la possibilité de les mettre à jour avec des signatures. Pour appeler des applications de mise à jour, ajoutez le Autorisation UPDATE_FONT signature|privileged à votre liste d'autorisation d'applications, et dans votre fichier manifeste.

Accorder l'autorisation UPDATE_FONT signature|privileged au programme de mise à jour de votre application .