No Android 11 e versões anteriores, a atualização de arquivos de fontes instalados no dispositivo no AOSP (na partição /system/fonts
) ou nas partições do fornecedor (nas partições /product/fonts
ou /system/fonts
) requer uma atualização do sistema do OEM. Este requisito tem um impacto significativo na compatibilidade dos emojis. No Android 12, você pode usar o serviço do sistema FontManager
para gerenciar arquivos de fontes instalados e atualizar arquivos de fontes instalados no dispositivo sem atualizar o sistema.
O Android 12 apresenta três interações de processo; FontManagerService
, Font Updater
e Application
.
O FontManagerService
é o sistema de gerenciamento central no servidor do sistema. FontManagerService
armazena as configurações de fonte do sistema mais recentes por usuário.
O FontUpdater
é um atualizador de fonte conectável confiável para uma verificação de permissão signature|privileged
. O FontUpdater
se comunica com o FontManagerService
para obter, instalar, remover ou atualizar as configurações atuais de fonte do sistema. O FontUpdater
pode transmitir novos conteúdos de arquivos de fontes por meio de mecanismos de comunicação entre processos (IPC). O FontManagerService
salva o conteúdo em um local de armazenamento legível por todos, como nos arquivos /data/fonts
. Este armazenamento é guardado. Pode ser escrito apenas pelo FontManagerService
, pela política SELinux.
Quando a classe Application
é iniciada, ela passa as configurações de fonte do sistema como argumentos do método bindApplication
; em seguida, inicializa as configurações de fonte para uso pelo processo do aplicativo.
Personalizar fontes
Alguns OEMs instalam ou substituem arquivos de fontes no AOSP para mostrar suas marcas. O Android 12 oferece suporte a essa funcionalidade, mas adiciona requisitos para manter as fontes de emoji atualizadas nos dispositivos. OEMs que não modificam ou atualizam arquivos de fontes emoji não precisam usar esse recurso.
O Google atualiza os arquivos de fontes, especialmente os arquivos NotoColorEmoji
por meio do GMS Core, portanto, não modifique ou remova o arquivo NotoColorEmoji.ttf
da partição /system
e não o remova de /system/etc/fonts.xml
. Observe as três maneiras a seguir de personalizar suas fontes:
- Substitua o arquivo
NotoColorEmoji.ttf
por uma fonte emoji da marca OEM. - Modifique o arquivo
NotoColorEmoji.ttf
de acordo com as necessidades do mercado local. - Substitua ou modifique outros arquivos de fontes.
Se você não estiver modificando as fontes emoji no AOSP, não precisará fazer nada. Se você deseja personalizar fontes de emoji, use as instruções nas seções a seguir.
Substitua NotoColorEmoji.ttf por fontes emoji da marca OEM
Para substituir o arquivo NotoColorEmoji.ttf
pelo arquivo de fontes emoji da marca OEM, coloque a fonte emoji logo antes da cadeia de fontes substitutas:
- Coloque sua própria fonte, chamada
OEMCustomEmoji.ttf
, na partição/system
. Modifique
/system/etc/fonts.xml
como no código a seguir:<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 as necessidades do mercado local
Siga estas etapas para personalizar de acordo com as necessidades do seu mercado local:
- Crie seu próprio arquivo
NotoColorEmoji
com um nome diferente; por exemplo, nomeie-oModified\_NotoColorEmoji.ttf
. - Coloque-o antes do arquivo
NotoColorEmoji.ttf
original.
Depois de executar a etapa 2, o glifo modificado compatível com Modified\NotoColorEmoji.ttf
é exibido em vez do NotoColorEmoji.ttf
original. O Google recomenda o seguinte:
- Tenha apenas o glifo necessário nesta fonte.
- Delegue glifos não modificados ao arquivo
NotoColorEmoji.ttf
original para que seus dispositivos recebam quaisquer correções de design feitas em versões futuras de emojis.
Remover glifos: para remover glifos do arquivo NotoColorEmoji.ttf
, siga as etapas 1 e 2 e especifique glyph ID = 0
em seu cmap.
Use um sinalizador regional: se o glifo de destino for um sinalizador regional, especifique o ID do glifo como um código de país desconhecido. (Use country code = "ZZ"
.)
Faça um glifo de tofu: você pode especificar explicitamente um ID de glifo de tofu se quiser usar um. Quando você especifica glyphID = 0
, o aplicativo relacionado interpreta isso como “o glifo não está disponível”. Por exemplo, quando você usa esse atributo, o aplicativo Paint#hasGlyph
retorna false
.
Substitua ou modifique outros arquivos de fontes
Para substituir ou modificar outras fontes, a customização é semelhante à modificação dos arquivos TTF para as necessidades do mercado local. Arquivos de fontes desconhecidos atualizados no AOSP em tempo de execução são ignorados e não são atualizados. O Google ignora fontes desconhecidas no seu dispositivo. Isso inclui arquivos de fontes que foram modificados das fontes originais no AOSP.
Embora as atualizações de fontes sejam feitas pelo Google no GMS Core, o mecanismo geral de atualização de fontes está aberto a todos os OEMs. Os OEMs podem instalar atualizadores de fontes adicionais usando as etapas em Atendendo aos pré-requisitos , Assinando arquivos de fontes e Fazendo atualizações de fontes em tempo de execução .
Atenda aos pré-requisitos
O mecanismo de atualização de fontes usa o recurso do kernel Linux fs-verity
. Verifique se o seu dispositivo é compatível com fs-verity
e inclua o certificado no seu dispositivo.
Assinar arquivos de fontes
Como os arquivos de fontes são recursos arriscados, eles devem ser verificados com chaves confiáveis. Revise cuidadosamente todos os arquivos de fontes que serão atualizados e assine com sua chave privada. A assinatura deve ser compatível com fs-verity
.
Faça atualizações de fonte em tempo de execução
O aplicativo FontManger
System realiza atualizações de fontes. O aplicativo FontManager
fornece o status de fonte do sistema instalado mais recente e a capacidade de atualizar arquivos de fonte com assinaturas. Para chamar aplicativos de atualização, adicione a UPDATE_FONT signature|privileged
à lista de permissões do seu aplicativo e ao seu manifesto .
Forneça a permissão UPDATE_FONT signature|privileged
para a função de atualização do seu aplicativo.