Implémentation d'une police de secours personnalisée

Dans Android 11 et les versions antérieures, la mise à jour des fichiers de police installés sur l'appareil dans AOSP (dans la partition /system/fonts ) ou les partitions du fournisseur (dans les partitions /product/fonts ou /system/fonts ) nécessite une mise à jour du système par l'OEM. Cette exigence a un impact significatif sur la compatibilité des emoji. Dans 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 propose trois interactions de processus ; FontManagerService , Font Updater et Application .

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

Le FontUpdater est un programme de mise à jour de polices enfichable qui est approuvé par une vérification des autorisations de signature|privileged . Le FontUpdater communique avec le FontManagerService pour obtenir, installer, supprimer ou mettre à jour les paramètres de police système actuels. Le FontUpdater peut transmettre de nouveaux contenus de fichiers de polices par des mécanismes de communication inter-processus (IPC). Le FontManagerService enregistre le contenu dans un emplacement de stockage lisible par tous, comme dans les /data/fonts . Ce stockage est gardé. Il peut être écrit uniquement par FontManagerService , par la politique 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 il initialise les paramètres de police à utiliser par le processus d'application.

Implémentation de polices personnalisées

Certains OEM installent ou remplacent les fichiers de polices dans AOSP pour afficher leurs marques. Android 12 prend en charge cette fonctionnalité, mais ajoute des exigences pour maintenir les polices emoji à jour dans les appareils. Les OEM qui ne modifient ni ne mettent à jour les fichiers de police emoji n'ont pas besoin d'utiliser cette fonctionnalité.

Google met à jour les fichiers de police, en particulier les fichiers NotoColorEmoji via GMS Core, donc ne modifiez pas ou ne supprimez pas le fichier NotoColorEmoji.ttf de la partition /system et ne le supprimez pas de /system/etc/fonts.xml . Notez les trois façons suivantes de personnaliser vos polices :

  1. Remplacez le fichier NotoColorEmoji.ttf par une police emoji de marque OEM.
  2. Modifiez le fichier NotoColorEmoji.ttf pour les besoins de votre marché local.
  3. Remplacez ou modifiez d'autres fichiers de polices.

Si vous ne modifiez pas les polices emoji dans AOSP, vous n'avez pas besoin d'agir. Si vous souhaitez personnaliser les polices emoji, suivez les instructions des sections suivantes.

Remplacement de NotoColorEmoji.ttf par des polices emoji de marque OEM

Pour remplacer le fichier NotoColorEmoji.ttf par votre fichier de polices emoji de marque OEM, placez la police emoji juste avant la chaîne de remplacement des polices :

  1. Placez votre propre police, appelée OEMCustomEmoji.ttf , dans la partition /system .
  2. Modifiez /system/etc/fonts.xml 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 de NotoColorEmoji.ttf pour les besoins du marché local

Suivez ces étapes pour personnaliser en fonction des besoins de votre marché local :

  1. Créez votre propre fichier NotoColorEmoji avec un nom différent ; par exemple, nommez-le Modified\_NotoColorEmoji.ttf .
  2. Placez-le avant le fichier NotoColorEmoji.ttf origine.

Après avoir effectué l'étape 2, le glyphe modifié pris en charge par Modified\NotoColorEmoji.ttf s'affiche à la place du NotoColorEmoji.ttf d'origine. Google recommande ce qui suit :

  • N'ayez que le glyphe nécessaire dans cette police.
  • Déléguez les glyphes non modifiés au fichier NotoColorEmoji.ttf d'origine afin que vos appareils reçoivent tous les correctifs de conception apportés dans les futures versions d'emoji.

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

Utiliser un indicateur régional : si le glyphe cible est un indicateur régional, spécifiez l'ID de glyphe en tant que code de 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 souhaitez en utiliser un. Lorsque vous spécifiez glyphID = 0 , l'application associée interprète cela 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 similaire à celle de la modification des fichiers tff pour les besoins du marché local. Les fichiers de polices inconnus qui sont mis à jour dans l'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 des polices soient effectuées par Google dans GMS Core, le mécanisme général de mise à jour des polices est ouvert à tous les OEM. Les OEM peuvent installer des programmes de mise à jour de polices supplémentaires en suivant les étapes décrites dans Réunion des conditions préalables , Signature des fichiers de police et Mise à jour des polices d'exécution .

Prérequis de réunion

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

Signature des fichiers de police

Étant donné que les fichiers de polices sont des ressources risquées, ils doivent être vérifiés avec des clés de confiance. Examinez attentivement tous les fichiers de polices à mettre à jour et signez avec votre clé privée. La signature doit être compatible fs-verity .

Mise à jour des polices d'exécution

L'application FontManger System effectue les mises à jour des polices. L'application FontManager fournit le dernier état des polices système installées et la possibilité de mettre à jour les fichiers de polices avec des signatures. Pour appeler des applications de mise à jour, ajoutez la UPDATE_FONT signature|privileged à votre liste d'autorisation d' applications et à votre manifeste .

Fournissez la UPDATE_FONT signature|privileged à la fonction de mise à jour de votre application.