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.ttfcon un carattere emoji con il brand OEM. - Modifica il file
NotoColorEmoji.ttfin 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.xmlin 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
NotoColorEmojicon un nome diverso, ad esempioModified\_NotoColorEmoji.ttf. - Posizionalo prima del file
NotoColorEmoji.ttforiginale.
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.ttforiginale 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.