A partir de Android 15, las fuentes variables se renderizan en el tiempo de ejecución con mayor eficiencia y granularidad. Con esta actualización, los proveedores deben agregar nuevas configuraciones de fuentes variables a font_fallback.xml
en lugar de fonts.xml
, ya que fonts.xml
se dará de baja.
Consulta Compatibilidad con fuentes variables para obtener más información.
En Android 11 y versiones anteriores, la actualización de archivos de fuente instalados en el dispositivo en AOSP (en la partición /system/fonts
) o 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 los emojis. En Android 12, puedes usar el servicio del sistema FontManager
para administrar los archivos de fuente instalados y actualizar los archivos de fuentes instalados en el dispositivo sin una actualización del sistema.
Android 12 incluye tres interacciones de procesos: FontManagerService
, Font Updater
y Application
.
El FontManagerService
es el sistema de administración central en el servidor del sistema.
FontManagerService
almacena la configuración de fuente del sistema más reciente por usuario.
FontUpdater
es un actualizador de fuentes conectable en el que confía una verificación de permisos de signature|privileged
. El objeto FontUpdater
se comunica con el objeto FontManagerService
para obtener, instalar, quitar o actualizar la configuración actual de la fuente del sistema. El FontUpdater
puede pasar el contenido de un nuevo archivo de fuente a través de mecanismos de comunicación entre procesos (IPC). FontManagerService
guarda el contenido en una ubicación de almacenamiento de lectura pública, como en los archivos /data/fonts
. Este almacenamiento está protegido. La política de SELinux la puede escribir solo el FontManagerService
.
Cuando se inicia la clase Application
, pasa la configuración de fuentes del sistema como argumentos del método bindApplication
y, luego, inicializa la configuración de fuentes para que la use el proceso de la app.
Compatibilidad con fuentes variables
A partir de Android 15, las configuraciones de fuentes variables se especifican 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 una lista de etiquetas de ejes admitidas separadas por comas. Con Android 15, solo se pueden especificar los ejes wght
y ital
.
Si no se especifica el atributo supportedAxes
, el nodo font
funciona como una fuente estática de una sola instancia de una fuente variable especificada con elementos secundarios axis
.
Si se especifica el atributo supportedAxes
, el sistema crea de forma dinámica una instancia de fuente para el valor de peso y estilo determinado en el tiempo de ejecución.
Los desarrolladores pueden usar la API de Java de android.graphics.fonts.SystemFonts#getAvailableFonts
o la API del NDK de ASystemFontIterator_open
para obtener una lista de los archivos de fuentes instalados en el sistema. Para obtener información sobre las APIs para desarrolladores que admiten esta actualización, consulta API de fuentes variables OpenType mejorada y buildVariableFamily
.
Cómo personalizar las 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 de emojis en los dispositivos. Los OEM que no modifican ni actualizan los archivos de fuentes de emojis no necesitan usar esta función.
Google actualiza los archivos de fuentes, en especial los archivos NotoColorEmoji
, a través de GMS Core, por lo que no debes modificar ni quitar el archivo NotoColorEmoji.ttf
de la partición /system
, ni quitarlo de /frameworks/base/data/fonts/fonts.xml
.
Ten en cuenta las siguientes tres formas en las que puedes personalizar tus fuentes:
- Reemplaza el archivo
NotoColorEmoji.ttf
por una fuente de emojis con la marca del OEM. - Modifica el archivo
NotoColorEmoji.ttf
según las necesidades de tu mercado local. - Reemplazar o modificar otros archivos de fuentes
Si no modificas las fuentes de emoji en AOSP, no es necesario que realices ninguna acción. Si quieres personalizar las fuentes de emoji, sigue las instrucciones de las siguientes secciones.
Reemplaza NotoColorEmoji.ttf por fuentes de emojis con la marca del OEM
Para reemplazar el archivo NotoColorEmoji.ttf
por el archivo de fuentes de emojis con la marca de tu OEM, coloca la fuente de emojis justo antes de la cadena de fuentes de resguardo:
- Coloca tu propia fuente, llamada
OEMCustomEmoji.ttf
, en la partición/system
. Modifica
/frameworks/base/data/fonts/fonts.xml
(y/frameworks/base/data/fonts/font-fallback.xml
en 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 según las necesidades del mercado local
Sigue estos pasos para personalizar la campaña según las necesidades de tu mercado local:
- Crea tu propio archivo
NotoColorEmoji
con un nombre diferente; por ejemplo, llámaloModified\_NotoColorEmoji.ttf
. - Colócalo antes del archivo
NotoColorEmoji.ttf
original.
Después de realizar el paso 2, se mostrará el glifo modificado compatible con Modified\NotoColorEmoji.ttf
en lugar del NotoColorEmoji.ttf
original.
Google recomienda lo siguiente:
- Solo tiene el glifo necesario en esta fuente.
- Delega los glifos sin modificar al archivo
NotoColorEmoji.ttf
original para que tus dispositivos reciban las correcciones de diseño que se realicen en futuras versiones de emojis.
Quita los glifos: Para quitar glifos del archivo NotoColorEmoji.ttf
, sigue los pasos 1 y 2, y especifica glyph ID = 0
en tu cmap.
Usa una marca regional: Si el glifo objetivo es una marca regional, especifica el ID del glifo como un código de país desconocido. (Usa country code = "ZZ"
).
Crea un glifo de tofu: Puedes especificar de forma explícita un ID de glifo de tofu si deseas usar uno. Cuando especificas glyphID = 0
, la app relacionada lo interpreta como "el glifo no está disponible". Por ejemplo, cuando usas este atributo, la app de 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 la modificación de los archivos TTF para las necesidades del mercado local. Se ignoran los archivos de fuentes desconocidos que se actualizan en AOSP durante el tiempo de ejecución, y no se actualizan. Google ignora las fuentes desconocidas en tu dispositivo. Esto incluye los archivos de fuentes que se modificaron a partir de las fuentes originales del AOSP.
Si bien Google realiza las actualizaciones de fuentes en GMS Core, el mecanismo general de actualización de fuentes está disponible para todos los OEM. Los OEM pueden instalar actualizadores de fuentes adicionales siguiendo los pasos que se indican en Cumple con los requisitos previos, Firma archivos de fuentes y Realiza actualizaciones de fuentes en el tiempo de ejecución.
Cumple con los requisitos previos
El mecanismo de actualización de fuentes usa la función fs-verity
del kernel de Linux. Verifica que tu dispositivo cumpla con los requisitos de fs-verity
y agrega el certificado a tu dispositivo.
Cómo firmar archivos de fuentes
Dado que los archivos de fuentes son recursos riesgosos, se deben verificar con claves de confianza.
Revisa con atención todos los archivos de fuentes que se actualizarán y firma con tu clave privada. La firma debe ser compatible confs-verity
.
Realiza actualizaciones de fuentes en el tiempo de ejecución
La app del sistema FontManager
realiza actualizaciones de fuentes. La app de FontManager
proporciona el estado de la fuente del sistema instalada más reciente y la capacidad de actualizar archivos de fuentes con firmas. Para llamar a las apps de actualización, agrega el permiso UPDATE_FONT signature|privileged
a tu lista de anunciantes permitidos de apps y a tu manifiesto.
Proporciona el permiso UPDATE_FONT signature|privileged
a la función de actualización de tu app.