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 por parte del OEM. Este requisito tiene un impacto significativo en la compatibilidad de emoji. En Android 12, puede utilizar 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 procesos; FontManagerService , Font Updater y Application .

FontManagerService es el sistema de gestión central en el servidor del sistema. FontManagerService almacena la configuración de fuentes del sistema más reciente por usuario.

FontUpdater es un actualizador de fuentes conectable 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 de fuentes actual del sistema. FontUpdater puede pasar nuevos contenidos de archivos de fuentes mediante mecanismos de comunicaciones entre procesos (IPC). FontManagerService guarda el contenido en una ubicación de almacenamiento legible en todo el mundo, como en los archivos /data/fonts . Este almacenamiento está vigilado. Puede ser escrito únicamente por FontManagerService , por la política 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 fuente para que la utilice 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 actualizadas las fuentes emoji en los dispositivos. Los OEM que no modifican ni actualizan archivos de fuentes emoji no necesitan utilizar esta función.

Google actualiza los archivos de fuentes, especialmente los archivos NotoColorEmoji a través de GMS Core, así que no modifique ni elimine el archivo NotoColorEmoji.ttf de la partición /system y no lo elimine 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 marca OEM.
  2. Modifique el archivo NotoColorEmoji.ttf para adaptarlo a las necesidades de su mercado local.
  3. Reemplace o modifique otros archivos de fuentes.

Si no está modificando las fuentes emoji en AOSP, no necesita realizar ninguna acción. Si desea personalizar las fuentes emoji, siga las instrucciones de 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 marca OEM, coloque la fuente emoji justo antes de la cadena alternativa 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 personalizarlo según las necesidades de su mercado local:

  1. Crea tu 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 sin modificar 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.

Utilice 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" .)

Crear un glifo de tofu: puede especificar explícitamente un ID de glifo de tofu si desea utilizar uno. Cuando especifica glyphID = 0 , la aplicación relacionada lo interpreta como "glifo no disponible". Por ejemplo, cuando usa este atributo, la aplicación Paint#hasGlyph devuelve false .

Reemplazar o modificar 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 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 Google realiza las actualizaciones de fuentes 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 en Cumplir con 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 función 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 .

Realizar 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 instalado en el sistema y la capacidad de actualizar archivos de fuentes con firmas. Para llamar a aplicaciones de actualización, agregue la UPDATE_FONT signature|privileged a su lista de aplicaciones permitidas y a su manifiesto .

Proporcione el permiso UPDATE_FONT signature|privileged a la función de actualización de su aplicación.