A partire da Android 15, i caratteri variabili vengono visualizzati in fase di esecuzione con maggiore efficienza e granularità. Con questo aggiornamento, i fornitori devono
aggiungere nuove configurazioni di caratteri variabili a
font_fallback.xml
anziché a fonts.xml
, poiché fonts.xml
è in fase di ritiro.
Per ulteriori informazioni, consulta la sezione Supporto dei caratteri variabili.
In Android 11 e versioni precedenti, l'aggiornamento dei file dei caratteri installati sul dispositivo in AOSP (nella partizione /system/fonts
) o nelle partizioni del fornitore (nelle partizioni /product/fonts
o /system/fonts
) richiede un aggiornamento di sistema da parte dell'OEM. Questo
requisito ha un impatto significativo sulla compatibilità delle emoji. In Android 12 puoi utilizzare il servizio di sistema FontManager
per gestire i file dei caratteri installati e aggiornare i file dei caratteri installati sul dispositivo senza un aggiornamento di sistema.
Android 12 offre tre interazioni con i processi:
FontManagerService
, Font Updater
e Application
.
FontManagerService
è il sistema di gestione centrale nel server di sistema.
FontManagerService
memorizza le impostazioni dei caratteri di sistema più recenti per utente.
FontUpdater
è un programma di aggiornamento dei caratteri plug-in considerato attendibile da un controllo delle autorizzazioni signature|privileged
. FontUpdater
comunica con FontManagerService
per ottenere, installare, rimuovere o aggiornare le impostazioni dei caratteri di sistema correnti. FontUpdater
può trasmettere i contenuti dei nuovi file di caratteri tramite meccanismi di comunicazione inter-processo (IPC). FontManagerService
salva i contenuti in un percorso di archiviazione di dominio pubblico, ad esempio nei file /data/fonts
. Questo
deposito è sorvegliato. Può essere scritto solo da FontManagerService
, in base al criterio SELinux.
Quando viene lanciato, il corso Application
passa le impostazioni dei caratteri di sistema come argomenti del metodo bindApplication
, quindi le inizializza per l'utilizzo da parte del processo dell'app.
Supporto dei caratteri variabili
A partire da Android 15, le configurazioni dei caratteri variabili vengono specificate in font_fallback.xml
utilizzando il seguente formato:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
In questo formato, un carattere variabile ha tutti gli attributi di un carattere statico con un attributo supportedAxes
aggiuntivo. Un attributo supportedAxes
è un
elenco separato da virgole di tag asse supportati. Con Android 15, è possibile specificare solo gli assi wght
e ital
.
Se l'attributo supportedAxes
non è specificato, il nodo font
funziona come carattere statico di una singola istanza di un carattere variabile specificato con elementi secondari axis
.
Se viene specificato l'attributo supportedAxes
, il sistema crea dinamicamente un'istanza di carattere per il valore di spessore e stile specificato in fase di esecuzione.
Gli sviluppatori possono utilizzare l'API Java android.graphics.fonts.SystemFonts#getAvailableFonts
o l'API NDK ASystemFontIterator_open
per ottenere un elenco dei file dei caratteri installati nel sistema. Per informazioni sulle API per sviluppatori che supportano questo aggiornamento, consulta API OpenType Variable Font migliorata e buildVariableFamily
.
Personalizzare i caratteri
Alcuni OEM installano o sostituiscono i file dei caratteri in AOSP per mostrare i propri brand. Android 12 supporta questa funzionalità, ma aggiunge requisiti per mantenere aggiornati i caratteri emoji sui dispositivi. Gli OEM che non modificano o aggiornati i file dei caratteri emoji non devono utilizzare questa funzionalità.
Google aggiorna i file dei caratteri, in particolare i file NotoColorEmoji
tramite GMS
Core, quindi non modificare o rimuovere il file NotoColorEmoji.ttf
dalla
partizione /system
e non rimuovere
/frameworks/base/data/fonts/fonts.xml
.
Tieni presente i tre modi seguenti in cui puoi personalizzare i caratteri:
- Sostituisci il file
NotoColorEmoji.ttf
con un carattere emoji con marchio OEM. - Modifica il file
NotoColorEmoji.ttf
in base alle esigenze del tuo mercato locale. - Sostituire o modificare altri file di caratteri.
Se non modifichi i caratteri emoji in AOSP, non devi fare nulla. Se vuoi personalizzare i caratteri emoji, segui le istruzioni riportate nelle seguenti sezioni.
Sostituire NotoColorEmoji.ttf con caratteri emoji con marchio OEM
Per sostituire il file NotoColorEmoji.ttf
con il file dei caratteri emoji con marchio OEM,
inserisci il carattere emoji appena prima della catena di caratteri di riserva:
- Inserisci il tuo carattere, denominato
OEMCustomEmoji.ttf
, nella partizione/system
. Modifica
/frameworks/base/data/fonts/fonts.xml
(e/frameworks/base/data/fonts/font-fallback.xml
su Android 15 e versioni successive) come nel seguente codice:<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>
Modificare NotoColorEmoji.ttf in base alle esigenze del mercato locale
Per personalizzare i dati in base alle esigenze del mercato locale:
- Crea il tuo file
NotoColorEmoji
con un nome diverso, ad esempioModified\_NotoColorEmoji.ttf
. - Inseriscilo prima del file
NotoColorEmoji.ttf
originale.
Dopo aver eseguito il passaggio 2, viene visualizzato il glifo modificato supportato daModified\NotoColorEmoji.ttf
anziché NotoColorEmoji.ttf
originale.
Google consiglia quanto segue:
- Avere solo il glifo necessario in questo carattere.
- Delega i glifi non modificati al file
NotoColorEmoji.ttf
originale in modo che i tuoi dispositivi ricevano eventuali correzioni di design apportate nelle release future delle emoji.
Rimuovi gli glifi: per rimuovere gli glifi dal file NotoColorEmoji.ttf
, segui i passaggi 1 e 2 e specifica glyph ID = 0
nel tuo cmap.
Utilizza una bandiera regionale:se il glifo di destinazione è una bandiera regionale, specifica l'ID glifo come codice paese sconosciuto. (Utilizza country code = "ZZ"
.)
Crea un glifo tofu: puoi specificare esplicitamente un ID glifo tofu se vuoi usarlo. Quando specifichi glyphID = 0
, l'app correlata lo interpreta come "il carattere non è disponibile". Ad esempio, quando utilizzi questo attributo, l'app Paint#hasGlyph
restituisce false
.
Sostituire o modificare altri file di caratteri
Per sostituire o modificare altri caratteri, la personalizzazione è simile a quella per la modifica dei file TTF in base alle esigenze del mercato locale. I file dei caratteri sconosciuti aggiornati in AOSP in fase di esecuzione vengono ignorati e non vengono aggiornati. Google ignora i caratteri sconosciuti sul tuo dispositivo. Sono inclusi i file dei caratteri modificati rispetto ai caratteri originali in AOSP.
Sebbene gli aggiornamenti dei caratteri vengano eseguiti da Google in GMS Core, il meccanismo di aggiornamento dei caratteri generale è aperto a tutti gli OEM. Gli OEM possono installare altri aggiornamenti dei caratteri seguendo i passaggi descritti in Requisiti di sistema, Firma dei file dei caratteri e Eseguire aggiornamenti dei caratteri in fase di runtime.
Soddisfare i prerequisiti
Il meccanismo di aggiornamento dei caratteri utilizza la funzionalità del kernel Linux fs-verity
. Verifica che il tuo dispositivo sia conforme a fs-verity
e includa il certificato.
File dei caratteri delle firme
Poiché i file dei caratteri sono risorse rischiose, devono essere verificati con chiavi attendibili.
Esamina attentamente tutti i file di caratteri da aggiornare e firmali con la tua chiave privata. La firma deve essere compatibile confs-verity
.
Eseguire aggiornamenti dei caratteri di runtime
L'app di sistema FontManager
esegue gli aggiornamenti dei caratteri. L'app FontManager
fornisce lo stato più recente dei caratteri di sistema installati e la possibilità di aggiornare i file dei caratteri con le firme. Per chiamare le app di aggiornamento, aggiungi l'autorizzazione UPDATE_FONT signature|privileged
alla lista consentita delle app e al file manifest.
Fornisci l'autorizzazione UPDATE_FONT signature|privileged
alla funzione di aggiornamento della tua app.