Implementar fontes personalizadas

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:

  1. Substitua o arquivo NotoColorEmoji.ttf por uma fonte emoji da marca OEM.
  2. Modifique o arquivo NotoColorEmoji.ttf de acordo com as necessidades do mercado local.
  3. 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:

  1. Coloque sua própria fonte, chamada OEMCustomEmoji.ttf , na partição /system .
  2. 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:

  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 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.