Implemente fontes personalizadas

No Android 11 e versões anteriores, a atualização dos arquivos de fonte 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. Esse requisito tem um impacto significativo na compatibilidade de emojis. No Android 12, você pode usar o serviço do sistema FontManager para gerenciar arquivos de fonte instalados e atualizar arquivos de fonte instalados no dispositivo sem uma atualização do 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 por usuário mais recentes.

O FontUpdater é um atualizador de fonte conectável que é confiável por uma 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 passar novos conteúdos de arquivo de fonte por 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 é protegido. Ele pode ser escrito apenas pelo FontManagerService , pela política do SELinux.

Quando a classe Application é iniciada, ela passa as configurações de fonte do sistema como argumentos do método bindApplication ; em seguida, ele inicializa as configurações de fonte para uso pelo processo do aplicativo.

Personalizar fontes

Alguns OEMs instalam ou substituem arquivos de fonte no AOSP para mostrar suas marcas. O Android 12 oferece suporte a essa funcionalidade, mas adiciona requisitos para manter as fontes emoji atualizadas nos dispositivos. Os OEMs que não modificam ou atualizam arquivos de fonte emoji não precisam usar esse recurso.

O Google atualiza os arquivos de fonte, 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:

  1. Substitua o arquivo NotoColorEmoji.ttf por uma fonte emoji de marca OEM.
  2. Modifique o arquivo NotoColorEmoji.ttf para atender às necessidades do mercado local.
  3. Substitua ou modifique outros arquivos de fonte.

Se você não estiver modificando as fontes emoji no AOSP, não precisará fazer nada. Se você quiser personalizar as fontes de emoji, siga as instruções nas seções a seguir.

Substitua NotoColorEmoji.ttf por fontes emoji de marca OEM

Para substituir o arquivo NotoColorEmoji.ttf pelo arquivo de fontes emoji de marca OEM, coloque a fonte emoji logo antes da cadeia de fallback de fonte:

  1. Coloque sua própria fonte, chamada OEMCustomEmoji.ttf , na partição /system .
  2. Modifique /system/etc/fonts.xml como no seguinte 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 as necessidades do mercado local

Siga estas etapas para personalizar de acordo com as necessidades do seu mercado local:

  1. Crie seu próprio arquivo NotoColorEmoji com um nome diferente; por exemplo, nomeie-o Modified\_NotoColorEmoji.ttf .
  2. Coloque-o antes do arquivo NotoColorEmoji.ttf original.

Depois de executar a etapa 2, o glifo modificado suportado por 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 emoji.

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 fonte

Para substituir ou modificar outras fontes, a personalização é semelhante à modificação dos arquivos TTF para as necessidades do mercado local. Arquivos de fontes desconhecidas que são atualizados no AOSP em tempo de execução são ignorados e não são atualizados. O Google ignora fontes desconhecidas em seu dispositivo. Isso inclui arquivos de fonte que foram modificados das fontes originais no AOSP.

Embora as atualizações de fonte sejam feitas pelo Google no GMS Core, o mecanismo geral de atualização de fonte está aberto a todos os OEMs. Os OEMs podem instalar atualizadores de fonte adicionais usando as etapas em Atendendo aos pré-requisitos , Assinando arquivos de fonte e Fazendo atualizações de fonte em tempo de execução .

Atende aos pré-requisitos

O mecanismo de atualização de fonte usa o recurso de kernel Linux fs-verity . Verifique se seu dispositivo é compatível com fs-verity e inclua o certificado em seu dispositivo.

Assinar arquivos de fonte

Como os arquivos de fonte são recursos arriscados, eles devem ser verificados com chaves confiáveis. Revise cuidadosamente todos os arquivos de fonte que devem ser 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 executa atualizações de fonte. 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 à sua lista de permissões de aplicativos e ao seu manifesto .

Forneça a UPDATE_FONT signature|privileged para a função de atualização do seu aplicativo.