Cómo implementar fuentes personalizadas

A partir de Android 15, las fuentes variables se renderizan en y un entorno de ejecución con mayor eficiencia y nivel de detalle. Con esta actualización, los proveedores agregar nuevas configuraciones de fuentes variables a font_fallback.xml en lugar de fonts.xml, ya que fonts.xml dejará de estar disponible. Consulta Compatibilidad con fuentes variables para obtener más información.

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.

Compatibilidad con fuentes variables

A partir de Android 15, las configuraciones de fuentes variables son especificadas en font_fallback.xml con el siguiente formato:

<family lang="und-Ethi" supportedAxes="wght,ital">
    <font>NotoSansEthiopic-VF.ttf</font>
</family>

En este formato, una fuente variable tiene todos los atributos de una fuente estática con un atributo supportedAxes adicional. Un atributo supportedAxes es un Lista de etiquetas de ejes compatibles separadas por comas. Con En Android 15, solo se pueden usar los ejes wght y ital especificada.

Si no se especifica el atributo supportedAxes, el nodo font funciona como un fuente estática de una sola instancia de una fuente variable especificada con axis hijos o hijas.

Si se especifica el atributo supportedAxes, el sistema crea dinámicamente un instancia de fuente para el valor de grosor y estilo dados en el tiempo de ejecución.

Los desarrolladores pueden usar la android.graphics.fonts.SystemFonts#getAvailableFonts La API de Java o la ASystemFontIterator_open API de NDK para obtener una lista de los archivos de fuentes instalados por el sistema. Para obtener información sobre para desarrolladores que admiten esta actualización, consulta API de OpenType Variable Font mejorada y buildVariableFamily.

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 /frameworks/base/data/fonts/fonts.xml Ten en cuenta las siguientes tres formas 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 /frameworks/base/data/fonts/fonts.xml (y /frameworks/base/data/fonts/font-fallback.xml in Android 15 y versiones posteriores) 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>
    

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.

Usa 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 FontManager realiza actualizaciones de la fuente. La app de FontManager proporciona el estado de la fuente del sistema instalado más reciente y la capacidad de actualizar la fuente archivos con firmas. Para llamar a apps de actualización, agrega UPDATE_FONT signature|privileged a tu lista de apps permitidas, y en tu manifiesto.

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