In Android 11 e versioni precedenti, l'aggiornamento dei file dei font installati dal dispositivo in AOSP (nella partizione /system/fonts
) o nelle partizioni del fornitore (nelle partizioni /product/fonts
o /system/fonts
) richiede un aggiornamento del 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 font installati e aggiornare i file dei font installati sul dispositivo senza un aggiornamento di sistema.
Android 12 presenta tre interazioni di processo; FontManagerService
, Font Updater
e Application
.
FontManagerService
è il sistema di gestione centrale nel server di sistema. FontManagerService
memorizza le ultime impostazioni dei caratteri di sistema per utente.
FontUpdater
è un programma di aggiornamento dei caratteri collegabile che è considerato attendibile da un controllo di autorizzazione signature|privileged
. FontUpdater
comunica con FontManagerService
per ottenere, installare, rimuovere o aggiornare le impostazioni dei font di sistema correnti. Il FontUpdater
può trasmettere nuovi contenuti di file di font tramite meccanismi di comunicazione tra processi (IPC). FontManagerService
salva il contenuto in un percorso di archiviazione leggibile da tutti, ad esempio nei file /data/fonts
. Questo deposito è custodito. Può essere scritto solo dal FontManagerService
, dalla policy SELinux.
Quando la classe Application
viene avviata, passa le impostazioni del carattere di sistema come argomenti del metodo bindApplication
; quindi inizializza le impostazioni del carattere per l'utilizzo da parte del processo dell'app.
Personalizza i caratteri
Alcuni OEM installano o sostituiscono i file dei font in AOSP per mostrare i loro marchi. Android 12 supporta questa funzionalità, ma aggiunge i requisiti per mantenere aggiornati i caratteri delle emoji nei dispositivi. Gli OEM che non modificano o aggiornano i file dei caratteri emoji non devono utilizzare questa funzione.
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 /system/etc/fonts.xml
. Nota i seguenti tre modi in cui puoi personalizzare i tuoi caratteri:
- Sostituisci il file
NotoColorEmoji.ttf
con un carattere emoji con marchio OEM. - Modifica il file
NotoColorEmoji.ttf
per le esigenze del tuo mercato locale. - Sostituisci o modifica altri file di font.
Se non stai modificando i caratteri emoji in AOSP, non è necessario agire. Se desideri personalizzare i caratteri emoji, utilizza le istruzioni nelle sezioni seguenti.
Sostituisci NotoColorEmoji.ttf con caratteri emoji con marchio OEM
Per sostituire il file NotoColorEmoji.ttf
con il tuo file di font emoji con marchio OEM, inserisci il font emoji appena prima della catena di fallback del font:
- Posiziona il tuo font, chiamato
OEMCustomEmoji.ttf
, nella partizione/system
. Modifica
/system/etc/fonts.xml
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, chiamaloModified\_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
al posto dell'originale NotoColorEmoji.ttf
. Google consiglia quanto segue:
- Avere solo il glifo necessario in questo tipo di carattere.
- Delega i glifi non modificati al file
NotoColorEmoji.ttf
originale in modo che i tuoi dispositivi ricevano eventuali correzioni di progettazione apportate nelle future versioni di emoji.
Rimuovi glifi: per rimuovere i glifi dal file NotoColorEmoji.ttf
, segui i passaggi 1 e 2 e specifica glyph ID = 0
nella tua cmap.
Usa una bandiera regionale: se il glifo di destinazione è una bandiera regionale, specifica l'ID del glifo come codice paese sconosciuto. (Usare country code = "ZZ"
.)
Crea un glifo tofu: puoi specificare esplicitamente un ID glifo tofu se vuoi usarne uno. Quando specifichi glyphID = 0
, l'app correlata lo interpreta come "glifo non disponibile". Ad esempio, quando usi questo attributo, l'app Paint#hasGlyph
restituisce false
.
Sostituisci o modifica altri file di font
Per sostituire o modificare altri font, la personalizzazione è simile a quella per la modifica dei file TTF per le esigenze del mercato locale. I file di caratteri sconosciuti che vengono aggiornati in AOSP in fase di esecuzione vengono ignorati e non vengono aggiornati. Google ignora i caratteri sconosciuti nel tuo dispositivo. Ciò include i file di font che sono stati modificati dai font 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 programmi di aggiornamento dei tipi di carattere aggiuntivi utilizzando i passaggi in Prerequisiti della riunione , Firma dei file dei tipi di carattere e Esecuzione degli aggiornamenti dei tipi di carattere in fase di esecuzione .
Soddisfa 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 tuo dispositivo.
Firma i file dei caratteri
Poiché i file dei caratteri sono risorse rischiose, devono essere verificati con chiavi attendibili. Esamina attentamente tutti i file dei caratteri che devono essere aggiornati e firma con la tua chiave privata. La firma deve essere compatibile con fs-verity
.
Aggiorna i caratteri in fase di esecuzione
L'app FontManger
System esegue gli aggiornamenti dei font. L'app FontManager
fornisce l'ultimo stato dei font di sistema installati e la possibilità di aggiornare i file dei font 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 file manifest .
Fornisci la UPDATE_FONT signature|privileged
alla funzione di aggiornamento della tua app.