À partir d'Android 15, les polices variables sont affichées au moment de l'exécution avec une meilleure efficacité et une meilleure granularité. Avec cette mise à jour, les fournisseurs doivent
ajouter de nouvelles configurations de polices variables à
font_fallback.xml
au lieu de fonts.xml, car fonts.xml est obsolète.
Pour en savoir plus, consultez Prise en charge des polices variables.
Sous Android 11 et versions antérieures, la mise à jour des fichiers de police installés sur l'appareil dans AOSP (dans la partition /system/fonts) ou dans les partitions du fournisseur (dans les partitions /product/fonts ou /system/fonts) nécessite une mise à jour du système de l'OEM. Cette exigence a un impact significatif sur la compatibilité des emoji. Sous Android 12, vous pouvez utiliser le service système FontManager pour gérer les fichiers de police installés et mettre à jour les fichiers de police installés sur l'appareil sans mise à jour du système.
Android 12 comporte 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 programme de mise à jour de police enfichable approuvé par une vérification d'autorisation signature|privileged. FontUpdater communique avec FontManagerService pour obtenir, installer, supprimer ou mettre à jour les paramètres de police système actuels. FontUpdater peut transmettre le contenu de nouveaux fichiers de police par le biais de mécanismes de communication interprocessus (IPC). FontManagerService enregistre le contenu dans un emplacement de stockage accessible en lecture par tous, par exemple dans les fichiers /data/fonts. Ce stockage est protégé. Il ne peut être écrit que par le FontManagerService seul, par
la règle SELinux.
Lorsque la classe Application est lancée, elle transmet les paramètres de police système en tant qu'
arguments de la méthode bindApplication, puis elle initialise les paramètres de police
pour qu'ils soient utilisés par le processus de l'application.
Prise en charge des polices variables
À partir d'Android 15, les configurations de polices variables sont
spécifiées dans
font_fallback.xml
au 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 une liste d'étiquettes d'axe compatibles séparées par une virgule. Avec Android 15, seuls les axes wght et ital peuvent être spécifiés.
Si l'attribut supportedAxes n'est pas spécifié, le nœud font fonctionne comme une police statique d'une seule instance d'une police variable spécifiée avec des enfants axis.
Si l'attribut supportedAxes est spécifié, le système crée dynamiquement une instance de police pour la valeur de style et de poids donnée au moment de l'exécution.
Les développeurs peuvent utiliser l'android.graphics.fonts.SystemFonts#getAvailableFonts
API Java ou l'ASystemFontIterator_open
API NDK pour obtenir la liste des fichiers de police installés sur le système. Pour en savoir plus sur les
API pour développeurs compatibles avec cette mise à jour, consultez
API de police variable OpenType améliorée
et buildVariableFamily.
Personnaliser les polices
Certains OEM installent ou remplacent des fichiers de police dans AOSP pour afficher leur marque. Android 12 est compatible avec cette fonctionnalité, mais ajoute des exigences pour que les polices d'emoji soient mises à jour sur les appareils. Les OEM qui ne modifient ni ne mettent à jour les fichiers de police d'emoji n'ont pas besoin d'utiliser cette fonctionnalité.
Google met à jour les fichiers de police, en particulier les NotoColorEmoji fichiers via GMS
Core. Ne modifiez ni ne supprimez le NotoColorEmoji.ttf fichier de la
/system partition, et ne le supprimez pas de
/frameworks/base/data/fonts/fonts.xml.
Notez les trois façons suivantes de personnaliser vos polices :
- Remplacez le fichier
NotoColorEmoji.ttfpar une police d'emoji à la marque de l'OEM. - Modifiez le fichier
NotoColorEmoji.ttfen fonction des besoins de votre marché local. - Remplacez ou modifiez d'autres fichiers de police.
Si vous ne modifiez pas les polices d'emoji dans AOSP, vous n'avez rien à faire. Si vous souhaitez personnaliser les polices d'emoji, suivez les instructions des sections suivantes.
Remplacer NotoColorEmoji.ttf par des polices d'emoji à la marque de l'OEM
Pour remplacer le fichier NotoColorEmoji.ttf par votre fichier de polices d'emoji à la marque de l'OEM, placez la police d'emoji juste avant la chaîne de secours de la police :
- Placez votre propre police, appelée
OEMCustomEmoji.ttf, dans la partition/system. Modifiez
/frameworks/base/data/fonts/fonts.xml(et/frameworks/base/data/fonts/font-fallback.xmlsous Android 15 et versions ultérieures) 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>
Modifier NotoColorEmoji.ttf en fonction des besoins du marché local
Pour personnaliser votre marché local, procédez comme suit :
- Créez votre propre fichier
NotoColorEmojiavec un nom différent. Par exemple, nommez-leModified\_NotoColorEmoji.ttf. - Placez-le avant le fichier
NotoColorEmoji.ttfd'origine.
Après l'étape 2, le glyphe modifié compatible avec
Modified\NotoColorEmoji.ttf s'affiche à la place du NotoColorEmoji.ttf.
Google recommande les éléments suivants :
- N'incluez que le glyphe nécessaire dans cette police.
- Déléguez les glyphes non modifiés au fichier
NotoColorEmoji.ttfd'origine afin que vos appareils reçoivent les corrections de conception apportées aux futures versions d'emoji.
Supprimer des glyphes : pour supprimer des glyphes du fichier NotoColorEmoji.ttf, suivez les étapes 1 et 2, puis spécifiez glyph ID = 0 dans votre cmap.
Utiliser un drapeau régional : si le glyphe cible est un drapeau régional, spécifiez l'ID du glyphe en tant que code pays inconnu. (Utilisez country code = "ZZ".)
Créer un glyphe tofu : vous pouvez spécifier explicitement un ID de glyphe tofu si vous souhaitez en utiliser un. Lorsque vous spécifiez glyphID = 0, l'application associée interprète cela comme "glyphe non 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 qui consiste à modifier les fichiers TTF pour les besoins du marché local. Les 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 les polices inconnues sur votre appareil. Cela inclut les fichiers de police qui ont été modifiés à partir des polices d'origine dans AOSP.
Bien que les mises à jour de police soient effectuées par Google dans GMS Core, le mécanisme général de mise à jour de police est ouvert à tous les OEM. Les OEM peuvent installer des programmes de mise à jour de police supplémentaires en suivant les étapes décrites dans Respecter les prérequis, Signer des fichiers de police, et Effectuer des mises à jour de police au moment de l'exécution.
Respecter les prérequis
Le mécanisme de mise à jour de police utilise la fonctionnalité de noyau Linux fs-verity. Vérifiez que votre appareil est conforme à fs-verity et incluez le certificat dans votre appareil.
Signer des fichiers de police
Étant donné que les fichiers de police sont 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-les avec votre clé privée. La signature doit être compatible avec fs-verity.
Effectuer des mises à jour de police au moment de l'exécution
L'application système FontManager effectue les mises à jour de police. L'application FontManager fournit le dernier état de la police système installée et permet de mettre à jour les fichiers de police avec des signatures. Pour appeler des applications de mise à jour, ajoutez l'
UPDATE_FONT signature|privileged autorisation à la
liste d'autorisation de votre application,
et à votre fichier manifeste.
Fournissez l'autorisation UPDATE_FONT signature|privileged à la fonction de mise à jour de votre application.