Cómo implementar fuentes personalizadas

En Android 11 y versiones anteriores, actualizar archivos de fuentes instalados en el dispositivo en AOSP (en el /system/fonts) o las particiones del proveedor (en la partición /product/fonts o /system/fonts particiones) requiere una actualización del sistema por parte del OEM. Esta tiene un impacto significativo en la compatibilidad de los emojis. En Android 12 puedes usar el sistema de FontManager para administrar los archivos de fuentes instalados y actualizar los archivos de fuentes instalados en el dispositivo sin una actualización del sistema.

Android 12 presenta tres interacciones de procesos: FontManagerService, Font Updater y Application.

FontManagerService es el sistema de administración central en el servidor del sistema. FontManagerService almacena la última configuración de fuentes del sistema por usuario.

FontUpdater es un actualizador de fuentes conectable que cuenta con la confianza de Verificación de permisos de signature|privileged. El FontUpdater se comunica con el FontManagerService para obtener, instalar, quitar o actualizar la fuente actual del sistema configuración. FontUpdater puede pasar contenido nuevo del archivo de fuentes entre procesos. de comunicación tradicional (IPC). FontManagerService guarda el contenido en una ubicación de almacenamiento legible en todo el mundo, como en los archivos /data/fonts Esta el almacenamiento esté protegido. Solo la puede escribir FontManagerService mediante Política de SELinux.

Cuando se inicia la clase Application, pasa la configuración de la fuente del sistema como Los argumentos del método bindApplication. luego, inicializa la configuración de la fuente para que los use el proceso de la app.

Personalizar fuentes

Algunos OEMs instalan o reemplazan archivos de fuentes en AOSP para mostrar sus marcas. Android 12 admite esta función, pero agrega para mantener actualizadas las fuentes de emojis en los dispositivos. los OEM que no modifican ni actualizar los archivos de fuente de emojis no necesitan usar esta función.

Google actualiza los archivos de fuente, en especial los archivos NotoColorEmoji, a través de GMS Core, por lo que no debes modificar ni quitar el archivo NotoColorEmoji.ttf del /system y no la quites de /system/etc/fonts.xml. Observa el Estas tres maneras en las que puedes personalizar tus fuentes:

  1. Reemplaza el archivo NotoColorEmoji.ttf con una fuente de emojis de la marca OEM.
  2. Modifica el archivo NotoColorEmoji.ttf según las necesidades de tu mercado local.
  3. Reemplaza o modifica otros archivos de fuente.

Si no modificas las fuentes de emojis en el AOSP, no es necesario que realices ninguna acción. Si si quieres personalizar las fuentes de emojis, sigue las instrucciones de la siguiente secciones.

Reemplaza NotoColorEmoji.ttf con fuentes de emojis de la marca OEM.

Para reemplazar el archivo NotoColorEmoji.ttf por el archivo de fuentes de emojis de la marca OEM, haz lo siguiente: Coloca la fuente de emojis justo antes de la cadena de resguardo de la fuente:

  1. Coloca tu propia fuente, llamada OEMCustomEmoji.ttf, en la partición /system.
  2. Modifica /system/etc/fonts.xml como se muestra en el siguiente código:

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

Modifica NotoColorEmoji.ttf para las necesidades del mercado local

Sigue estos pasos para personalizar las campañas según las necesidades de tu mercado local:

  1. Crea tu propio archivo NotoColorEmoji con un nombre diferente. por ejemplo, Asígnale el nombre Modified\_NotoColorEmoji.ttf.
  2. Colócalo antes del archivo NotoColorEmoji.ttf original.

Después de realizar el paso 2, el glifo modificado admitido por Modified\NotoColorEmoji.ttf en lugar del NotoColorEmoji.ttf original. Google recomienda lo siguiente:

  • Solo debes tener el glifo necesario en esta fuente.
  • Delega glifos sin modificar al archivo NotoColorEmoji.ttf original para que tus dispositivos recibirán las correcciones de diseño que se hagan en futuras versiones de emojis.

Quitar glifos: Para quitar glifos del archivo NotoColorEmoji.ttf, sigue estos pasos: los pasos 1 y 2, y especifica glyph ID = 0 en tu cmap.

Utiliza una marca regional: Si el glifo de destino es una marca regional, especifica la ID del glifo como un código de país desconocido. (Usa country code = "ZZ").

Crear un glifo de tofu: si lo deseas, puedes especificar explícitamente un ID de glifo de tofu de usar uno. Cuando especificas glyphID = 0, la app relacionada lo interpreta como "el glifo no está disponible". Por ejemplo, si usas este atributo, el La app de Paint#hasGlyph muestra false.

Cómo reemplazar o modificar otros archivos de fuente

Para reemplazar o modificar otras fuentes, la personalización es similar a la de modificar los archivos TTF según las necesidades del mercado local Archivos de fuentes desconocidas que se en el AOSP durante el tiempo de ejecución se ignoran y no se actualizan. Google ignora fuentes desconocidas en tu dispositivo. Esto incluye los archivos de fuentes que se modificaron las fuentes originales en AOSP.

Si bien Google realiza las actualizaciones de fuentes en GMS Core, la actualización general de atención al público está disponible para todos los OEM. Los OEMs pueden instalar actualizadores de fuentes adicionales usando los pasos en Cumplir con los requisitos previos, Firmar archivos de fuentes, y Cómo realizar actualizaciones de fuentes durante el tiempo de ejecución.

Cumpla con los requisitos previos

El mecanismo de actualización de fuentes usa la función del kernel de Linux fs-verity. Verifica lo siguiente: tu dispositivo cumple con fs-verity y debe incluir el certificado en el dispositivo.

Firmar archivos de fuentes

Dado que los archivos de fuentes son recursos riesgosos, se deben verificar con claves de confianza. Revisa cuidadosamente todos los archivos de fuentes que deseas actualizar y fírmalos con tu privada. La firma debe ser compatible con fs-verity.

Cómo realizar actualizaciones de fuentes de tiempo de ejecución

La app del sistema de FontManger realiza actualizaciones de la fuente. La app de FontManager proporciona el último estado de la fuente del sistema instalado y la posibilidad de actualizar los archivos de fuentes con firmas. Para llamar a apps de actualización, agrega UPDATE_FONT signature|privileged permiso a la lista de apps permitidas y en tu manifiesto.

Otorga el permiso UPDATE_FONT signature|privileged al actualizador de la app .