Implementare caratteri personalizzati

A partire da Android 15, i caratteri variabili vengono sottoposti a rendering 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 saperne di più, 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 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 aggiornarli senza un aggiornamento di sistema.

Android 12 include 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 collegabile, 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 nuovi contenuti dei file dei caratteri 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. Questa risorsa di archiviazione è protetta. Può essere scritta dal FontManagerService solo, dalla policy SELinux.

Quando viene avviata la classe Application, questa trasmette 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 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 degli assi 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 l'attributo supportedAxes è specificato, 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'android.graphics.fonts.SystemFonts#getAvailableFonts API Java o l'ASystemFontIterator_open API NDK per ottenere un elenco dei file dei caratteri installati sul sistema. Per informazioni sulle API per sviluppatori che supportano questo aggiornamento, consulta API per caratteri variabili OpenType migliorata e buildVariableFamily.

Personalizza 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 sui dispositivi. Gli OEM che non modificano o aggiornano i file dei caratteri delle 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 /system partizione e non rimuoverlo da /frameworks/base/data/fonts/fonts.xml. Tieni presente i seguenti tre modi in cui puoi personalizzare i caratteri:

  1. Sostituisci il file NotoColorEmoji.ttf con un carattere emoji con il brand dell'OEM.
  2. Modifica il file NotoColorEmoji.ttf in base alle esigenze del tuo mercato locale.
  3. Sostituisci o modifica altri file dei caratteri.

Se non modifichi i caratteri delle emoji in AOSP, non devi fare nulla. Se vuoi personalizzare i caratteri delle emoji, segui le istruzioni nelle sezioni seguenti.

Sostituisci NotoColorEmoji.ttf con caratteri emoji con il brand dell'OEM

Per sostituire il file NotoColorEmoji.ttf con il file dei caratteri emoji con il brand dell'OEM, inserisci il carattere emoji appena prima della catena di riserva dei caratteri:

  1. Inserisci il tuo carattere, denominato OEMCustomEmoji.ttf, nella partizione /system.
  2. 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 in base alle esigenze del tuo mercato locale:

  1. Crea il tuo file NotoColorEmoji con un nome diverso, ad esempio, chiamalo Modified\_NotoColorEmoji.ttf.
  2. Inseriscilo prima del file NotoColorEmoji.ttf originale.

Dopo aver eseguito il passaggio 2, il glifo modificato supportato da Modified\NotoColorEmoji.ttf viene visualizzato al posto del file NotoColorEmoji.ttf originale. Google consiglia di:

  • Avere solo il glifo necessario in questo carattere.
  • Delegare i glifi non modificati al file NotoColorEmoji.ttf originale in modo che i tuoi dispositivi ricevano eventuali 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 nel cmap.

Utilizza un flag regionale: se il glifo di destinazione è un flag regionale, specifica l'ID del glifo come codice paese sconosciuto. (Utilizza country code = "ZZ".)

Crea un glifo tofu: se vuoi, puoi specificare esplicitamente un ID glifo tofu. 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.

Sostituisci o modifica altri file dei 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 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 programmi di aggiornamento dei caratteri aggiuntivi seguendo i passaggi descritti in Soddisfare i prerequisiti, Firmare i file dei caratteri, ed Eseguire aggiornamenti dei caratteri in fase di runtime.

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 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 da aggiornare e firmali con la tua chiave privata. La firma deve essere compatibile con fs-verity.

Esegui aggiornamenti dei caratteri in fase 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 tua lista consentita delle app, e al manifest.

Fornisci l'autorizzazione UPDATE_FONT signature|privileged alla funzione di aggiornamento dell'app.