A partire da Android 15, i caratteri variabili vengono visualizzati
in fase di runtime 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 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 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 prevede tre interazioni di processo: 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
del carattere di sistema corrente. FontUpdater
può passare i nuovi contenuti del file del carattere tramite meccanismi di comunicazione interprocesso (IPC). FontManagerService
salva i contenuti in
una posizione di archiviazione leggibile a livello globale, ad esempio nei file /data/fonts
. Questo
spazio di archiviazione è protetto. Può essere scritto solo dal FontManagerService
, dai criteri SELinux.
Quando viene avviata la classe Application
, passa le impostazioni dei caratteri di sistema come
argomenti del metodo bindApplication
, quindi inizializza le impostazioni dei caratteri
per l'utilizzo da parte del processo dell'app.
Supporto per i 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 un
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 del carattere per il valore di peso e stile specificato in fase di runtime.
Gli sviluppatori possono utilizzare l'API Java android.graphics.fonts.SystemFonts#getAvailableFonts
o l'API NDK ASystemFontIterator_open
per ottenere un elenco di file di caratteri installati nel sistema. Per informazioni sulle
API per sviluppatori che supportano questo aggiornamento, vedi
API per caratteri variabili OpenType 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 nei dispositivi. I produttori OEM che non modificano o aggiornano 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 rimuoverlo da
/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 il brand OEM. - Modifica il file
NotoColorEmoji.ttf
in base alle esigenze del tuo mercato locale. - Sostituisci o modifica altri file di caratteri.
Se non modifichi i caratteri emoji in AOSP, non devi fare nulla. Se vuoi personalizzare i caratteri degli emoji, segui le istruzioni riportate nelle sezioni seguenti.
Sostituisci NotoColorEmoji.ttf con i caratteri emoji con brand OEM
Per sostituire il file NotoColorEmoji.ttf
con il file dei caratteri emoji con il brand OEM,
inserisci il carattere emoji appena prima della catena di fallback dei caratteri:
- Inserisci il tuo carattere, chiamato
OEMCustomEmoji.ttf
, nella partizione/system
. Modifica
/frameworks/base/data/fonts/fonts.xml
(e/frameworks/base/data/fonts/font-fallback.xml
in 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>
Modifica NotoColorEmoji.ttf in base alle esigenze del mercato locale
Segui questi passaggi per personalizzare i dati in base alle esigenze del mercato locale:
- Crea un file
NotoColorEmoji
con un nome diverso, ad esempioModified\_NotoColorEmoji.ttf
. - Posizionalo prima del file
NotoColorEmoji.ttf
originale.
Dopo aver eseguito il passaggio 2, viene visualizzato il glifo modificato supportato da
Modified\NotoColorEmoji.ttf
anziché quello originale NotoColorEmoji.ttf
.
Google consiglia quanto segue:
- Contiene solo il glifo necessario.
- Delega i glifi non modificati al file
NotoColorEmoji.ttf
originale in modo che i tuoi dispositivi ricevano le correzioni di progettazione apportate nelle future release di emoji.
Rimuovi i glifi: per rimuovere i glifi dal file NotoColorEmoji.ttf
, segui
i passaggi 1 e 2 e specifica glyph ID = 0
nella cmap.
Utilizza un flag regionale:se il glifo di destinazione è un flag 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
utilizzarne uno. Quando specifichi glyphID = 0
, l'app correlata lo interpreta come
"il glifo 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 per le esigenze del mercato locale. I file dei caratteri sconosciuti che vengono aggiornati in AOSP in fase di runtime 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 generale di aggiornamento dei caratteri è aperto a tutti gli OEM. Gli OEM possono installare ulteriori programmi di aggiornamento dei caratteri seguendo i passaggi descritti in Prerequisiti, Firma dei file dei caratteri e 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 includi il certificato nel dispositivo.
File dei caratteri del cartello
Poiché i file dei caratteri sono risorse rischiose, devono essere verificati con chiavi attendibili.
Esamina attentamente tutti i file di caratteri da aggiornare e firma con la tua
chiave privata. La firma deve essere compatibile con fs-verity
.
Eseguire aggiornamenti dei caratteri di runtime
L'app di sistema FontManager
esegue gli aggiornamenti dei caratteri. L'app FontManager
fornisce lo stato dei caratteri di sistema installati più recenti 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 tua
lista consentita delle app
e al tuo manifest.
Fornisci l'autorizzazione UPDATE_FONT signature|privileged
alla funzione di aggiornamento dell'app.