A partire da Android 15, il rendering dei caratteri variabili viene
visualizzato 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
verrà ritirato.
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 per l'aggiornamento dei caratteri collegabile che viene considerato attendibile da un
controllo delle autorizzazioni signature|privileged
. FontUpdater
comunica con il FontManagerService
per ricevere, installare, rimuovere o aggiornare le impostazioni correnti dei caratteri di sistema. FontUpdater
può passare nuovi contenuti dei file dei caratteri tramite meccanismi di comunicazione tra processi (IPC). FontManagerService
salva i contenuti in un percorso di archiviazione di dominio pubblico, ad esempio nei file /data/fonts
. Questo spazio di archiviazione è protetto. 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 per 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 per una singola istanza di un carattere variabile specificato con i
caratteri secondari axis
.
Se viene specificato l'attributo supportedAxes
, il sistema crea dinamicamente un'istanza del carattere per il valore di ponderazione 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 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 delle emoji nei dispositivi. Gli OEM che non modificano o aggiornano i file dei caratteri delle emoji non devono usare 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 brand OEM. - Modifica il file
NotoColorEmoji.ttf
in base alle esigenze del tuo mercato locale. - Sostituire o modificare altri file di caratteri.
Se non stai modificando i caratteri emoji in AOSP, non è richiesta alcuna azione da parte tua. Se vuoi personalizzare i caratteri emoji, segui le istruzioni riportate nelle seguenti sezioni.
Sostituisci NotoColorEmoji.ttf con caratteri emoji con brand OEM
Per sostituire il file NotoColorEmoji.ttf
con il tuo file di caratteri emoji con brand OEM,
inserisci il carattere emoji appena prima della catena di riserva del carattere:
- 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
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>
Modifica NotoColorEmoji.ttf per le esigenze del mercato locale
Segui questi passaggi per personalizzare in base alle esigenze del tuo mercato locale:
- Crea il tuo file
NotoColorEmoji
con un nome diverso, ad esempio denominaloModified\_NotoColorEmoji.ttf
. - Inseriscilo prima del file
NotoColorEmoji.ttf
originale.
Dopo aver eseguito il passaggio 2, viene visualizzato il glifo modificato supportato da Modified\NotoColorEmoji.ttf
anziché l'elemento 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 le correzioni al 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.
Usa una bandiera regionale: se il glifo di destinazione è una bandiera regionale, specifica l'ID
del glifo come codice paese sconosciuto. (Usa country code = "ZZ"
.)
Crea un glifo tofu: puoi specificare esplicitamente un ID glifo tofu se vuoi utilizzarne uno. Se specifichi glyphID = 0
, l'app correlata lo interpreta come
"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 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.
Anche se gli aggiornamenti dei caratteri vengono eseguiti da Google in GMS Core, il meccanismo generale di aggiornamento dei caratteri è aperto a tutti gli OEM. Gli OEM possono installare altri programmi di aggiornamento dei caratteri seguendo i passaggi descritti in Prerequisiti per soddisfare i requisiti, Firmare i file dei caratteri e Aggiornare i caratteri di runtime.
Prerequisiti di Meet
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 per le 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.