No Android 15 e versões mais recentes, as fontes variáveis são renderizadas em
de execução com mais eficiência e granularidade. Com essa atualização, os fornecedores precisam
adicionar novas configurações de fonte variáveis ao
font_fallback.xml
em vez de fonts.xml
, já que fonts.xml
está sendo descontinuado.
Consulte Suporte para fontes variáveis para mais informações.
No Android 11 e versões anteriores, a atualização de arquivos de fontes instaladas pelo dispositivo no AOSP (na
/system/fonts
) ou as partições do fornecedor (na /product/fonts
ou
/system/fonts
) exigem uma atualização do sistema do OEM. Isso
tem um impacto significativo
na compatibilidade de emojis. Em
Android 12, você pode usar o sistema FontManager
serviço para gerenciar arquivos de fontes instaladas e atualizar os arquivos de fontes instaladas no dispositivo
sem uma atualização do sistema.
O Android 12 apresenta três interações de processos:
FontManagerService
, Font Updater
e Application
.
O FontManagerService
é o sistema de gerenciamento central no servidor do sistema.
O FontManagerService
armazena as configurações de fonte do sistema mais recentes por usuário.
O FontUpdater
é um atualizador de fontes conectável e confiável
Verificação de permissão signature|privileged
. O FontUpdater
se comunica com
FontManagerService
para acessar, instalar, remover ou atualizar a fonte atual do sistema
configurações. O FontUpdater
pode transmitir o novo conteúdo do arquivo de fonte por processos internos.
de comunicação (IPC). O FontManagerService
salva o conteúdo em
um local de armazenamento legível por todos, como nos arquivos /data/fonts
. Isso
se o armazenamento é protegido. Pode ser escrita apenas pela FontManagerService
, pela
política do SELinux.
Quando a classe Application
é iniciada, ela transmite as configurações de fonte do sistema como
do método bindApplication
. depois inicializa as configurações de fonte
para uso no processo do app.
Suporte a fontes variáveis
A partir do Android 15, as configurações de fonte variáveis são:
especificado em
font_fallback.xml
usando o seguinte formato:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
Nesse formato, uma fonte variável tem todos os atributos de uma fonte estática com
um atributo supportedAxes
extra. Um atributo supportedAxes
é um
lista separada por vírgulas de tags de eixo compatíveis. Com
Android 15, apenas os eixos wght
e ital
podem ser
especificado.
Se o atributo supportedAxes
não for especificado, o nó font
vai funcionar como um
fonte estática de uma única instância de uma fonte variável especificada com axis
crianças.
Se o atributo supportedAxes
for especificado, o sistema criará dinamicamente um
instância de fonte para o valor de peso e estilo no tempo de execução.
Os desenvolvedores podem usar o android.graphics.fonts.SystemFonts#getAvailableFonts
API Java ou a ASystemFontIterator_open
API NDK para receber uma lista de arquivos de fontes instalados pelo sistema. Para informações sobre
APIs de desenvolvedor compatíveis com essa atualização, consulte
API OpenType Variable Font aprimorada
e buildVariableFamily
.
Personalizar fontes
Alguns OEMs instalam ou substituem arquivos de fonte no AOSP para mostrar as marcas deles. O Android 12 é compatível com essa funcionalidade, mas adiciona requisitos para manter as fontes de emojis atualizadas nos dispositivos. OEMs que não modificam nem os arquivos de fonte de emojis não precisam usar esse recurso.
O Google atualiza os arquivos de fontes, especialmente os arquivos NotoColorEmoji
pelo GMS
Core. Portanto, não modifique nem remova o arquivo NotoColorEmoji.ttf
da
/system
e não a remova da
/frameworks/base/data/fonts/fonts.xml
.
Veja a seguir três maneiras de personalizar suas fontes:
- Substitua o arquivo
NotoColorEmoji.ttf
por uma fonte de emojis com a marca do OEM. - Modifique o arquivo
NotoColorEmoji.ttf
de acordo com as necessidades do seu mercado local. - Substitua ou modifique outros arquivos de fonte.
Se você não está modificando fontes de emojis no AOSP, não precisa fazer nada. Se quiser personalizar as fontes de emojis, siga as instruções abaixo em outras seções.
Substituir NotoColorEmoji.ttf por fontes de emojis com a marca do OEM
Para substituir o arquivo NotoColorEmoji.ttf
pelo arquivo de fontes de emojis da marca OEM:
coloque a fonte do emoji logo antes da cadeia de fontes substitutas:
- Insira uma fonte própria, chamada
OEMCustomEmoji.ttf
, na partição/system
. Modifique
/frameworks/base/data/fonts/fonts.xml
(e/frameworks/base/data/fonts/font-fallback.xml
pol. Android 15 e versões mais recentes), 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 o 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 outro nome. por exemplo, nomeie-o comoModified\_NotoColorEmoji.ttf
. - Coloque-o antes do arquivo
NotoColorEmoji.ttf
original.
Depois de executar a etapa 2, o glifo modificado suportado pelo
Mostra Modified\NotoColorEmoji.ttf
em vez do NotoColorEmoji.ttf
original.
O Google recomenda o seguinte:
- Tenha apenas o glifo necessário nessa fonte.
- Delegue glifos não modificados ao arquivo
NotoColorEmoji.ttf
original para que seus dispositivos recebem as correções de design feitas em lançamentos futuros de emojis.
Remover glifos:para remover glifos do arquivo NotoColorEmoji.ttf
, siga
etapas 1 e 2, e especifique glyph ID = 0
em seu cmap.
Use uma sinalização regional: se o glifo de destino for regional, especifique o
o ID do glifo como um código de país desconhecido. Use country code = "ZZ"
.
Criar um glifo de tofu:você pode especificar explicitamente um ID de glifo de tofu se quiser.
para usar um. Quando você especifica glyphID = 0
, o app relacionado interpreta isso como
"o glifo não está disponível". Por exemplo, quando você usa este atributo, o
O app Paint#hasGlyph
retorna false
.
Substituir ou modificar outros arquivos de fonte
Para substituir ou modificar outras fontes, a personalização é semelhante à do modificando os arquivos TTF para as necessidades do mercado local. Os arquivos de fonte desconhecidos que são atualizados no AOSP no momento da execução são ignorados e não são atualizados. O Google ignora fontes desconhecidas no seu dispositivo. Isso inclui arquivos de fonte que foram modificados as fontes originais no AOSP.
Embora as atualizações de fonte sejam feitas pelo Google no GMS Core, a atualização geral de fontes é aberto a todos os OEMs. OEMs podem instalar mais atualizadores de fontes usando Siga as etapas em Pré-requisitos da reunião e Assinar arquivos de fonte. e Como fazer atualizações de fontes no momento da execução.
Atender aos pré-requisitos
O mecanismo de atualização de fontes usa o recurso fs-verity
do kernel do Linux. Verifique se
Seu dispositivo é compatível com fs-verity
e inclua o certificado nele.
Assinar arquivos de fonte
Como os arquivos de fonte são recursos arriscados, eles precisam ser verificados com chaves confiáveis.
Revise cuidadosamente todos os arquivos de fonte que serão atualizados e assine com sua
chave privada. A assinatura precisa ser compatível com fs-verity
.
Fazer atualizações de fonte durante a execução
O app do sistema FontManager
executa atualizações de fonte. O app FontManager
oferece o status mais recente da fonte do sistema instalada e a capacidade de atualizar a fonte
arquivos com assinaturas. Para chamar apps de atualização, adicione o método
UPDATE_FONT signature|privileged
permissão para sua
lista de permissões de apps,
e ao manifesto.
Conceder a permissão UPDATE_FONT signature|privileged
ao atualizador do app
função.