Implementar fuentes personalizadas

En Android 11 y versiones anteriores, la actualización de los archivos de fuentes instalados en el dispositivo en AOSP (en la partición /system/fonts ) o en las particiones del proveedor (en las particiones /product/fonts o /system/fonts ) requiere una actualización del sistema del OEM. Este requisito tiene un impacto significativo en la compatibilidad con emoji. En Android 12, puede usar el servicio del sistema 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 proceso; 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 fuente del sistema por usuario.

El FontUpdater es un actualizador de fuentes enchufable en el que confía una verificación de permisos signature|privileged . FontUpdater se comunica con FontManagerService para obtener, instalar, eliminar o actualizar la configuración actual de fuentes del sistema. FontUpdater puede pasar nuevos contenidos de archivos de fuentes mediante mecanismos de comunicación entre procesos (IPC). FontManagerService guarda el contenido en una ubicación de almacenamiento de lectura universal, como en los archivos /data/fonts . Este almacenamiento está vigilado. Puede ser escrito solo por FontManagerService , por política de SELinux.

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

Personalizar fuentes

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

Google actualiza los archivos de fuentes, especialmente los archivos NotoColorEmoji a través de GMS Core, así que no modifiques ni elimines el archivo NotoColorEmoji.ttf de la partición /system , y no lo elimines de /system/etc/fonts.xml . Tenga en cuenta las siguientes tres formas en que puede personalizar sus fuentes:

  1. Reemplace el archivo NotoColorEmoji.ttf con una fuente emoji de la marca OEM.
  2. Modifique el archivo NotoColorEmoji.ttf para las necesidades de su mercado local.
  3. Reemplace o modifique otros archivos de fuentes.

Si no está modificando las fuentes de emoji en AOSP, no necesita tomar medidas. Si desea personalizar las fuentes de emoji, use las instrucciones en las siguientes secciones.

Reemplace NotoColorEmoji.ttf con fuentes emoji de marca OEM

Para reemplazar el archivo NotoColorEmoji.ttf con su archivo de fuentes emoji de la marca OEM, coloque la fuente emoji justo antes de la cadena de reserva de fuentes:

  1. Coloque su propia fuente, llamada OEMCustomEmoji.ttf , en la partición /system .
  2. Modifique /system/etc/fonts.xml como 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>
    

Modifique NotoColorEmoji.ttf para las necesidades del mercado local

Siga estos pasos para personalizar según las necesidades de su mercado local:

  1. Cree su propio archivo NotoColorEmoji con un nombre diferente; por ejemplo, asígnele el nombre Modified\_NotoColorEmoji.ttf .
  2. Colóquelo antes del archivo NotoColorEmoji.ttf original.

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

  • Solo tenga el glifo necesario en esta fuente.
  • Delegue glifos no modificados al archivo NotoColorEmoji.ttf original para que sus dispositivos reciban las correcciones de diseño realizadas en futuras versiones de emoji.

Eliminar glifos: para eliminar glifos del archivo NotoColorEmoji.ttf , siga los pasos 1 y 2 y especifique glyph ID = 0 en su cmap.

Usar una bandera regional: si el glifo de destino es una bandera regional, especifique el ID del glifo como un código de país desconocido. (Utilice country code = "ZZ" .)

Haz un glifo de tofu: puedes especificar explícitamente un ID de glifo de tofu si quieres usar uno. Cuando especifica glyphID = 0 , la aplicación relacionada lo interpreta como "el glifo no está disponible". Por ejemplo, cuando usa este atributo, la aplicación Paint#hasGlyph devuelve false .

Reemplace o modifique otros archivos de fuentes

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

Aunque las actualizaciones de fuentes las realiza Google en GMS Core, el mecanismo general de actualización de fuentes está abierto a todos los OEM. Los OEM pueden instalar actualizadores de fuentes adicionales siguiendo los pasos de Cumplir los requisitos previos , Firmar archivos de fuentes y Realizar actualizaciones de fuentes en tiempo de ejecución .

Cumplir con los requisitos previos

El mecanismo de actualización de fuentes utiliza la característica del kernel de Linux fs-verity . Verifique que su dispositivo sea compatible con fs-verity e incluya el certificado en su dispositivo.

Firmar archivos de fuentes

Dado que los archivos de fuentes son recursos riesgosos, deben verificarse con claves confiables. Revise cuidadosamente todos los archivos de fuentes que se van a actualizar y firme con su clave privada. La firma debe ser compatible con fs-verity .

Hacer actualizaciones de fuentes en tiempo de ejecución

La aplicación FontManger System realiza actualizaciones de fuentes. La aplicación FontManager proporciona el último estado de fuente del sistema instalado y la capacidad de actualizar archivos de fuentes con firmas. Para llamar a las aplicaciones de actualización, agregue la UPDATE_FONT signature|privileged a su lista de aplicaciones permitidas y a su manifiesto .

Proporcione la UPDATE_FONT signature|privileged para la función de actualización de su aplicación.