Implementa caratteri personalizzati

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 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 caratteri installati e aggiornare i file dei caratteri installati sul dispositivo senza un aggiornamento del sistema.

Android 12 presenta tre interazioni di processo; FontManagerService , Font Updater e Application .

Il 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 considerato affidabile da un controllo di autorizzazione signature|privileged . FontUpdater comunica con FontManagerService per ottenere, installare, rimuovere o aggiornare le impostazioni correnti dei caratteri del sistema. FontUpdater può passare nuovi contenuti di file di caratteri tramite meccanismi di comunicazione tra processi (IPC). FontManagerService salva il contenuto in una posizione di archiviazione leggibile da tutti, come nei file /data/fonts . Questo deposito è custodito. Può essere scritto solo da FontManagerService , secondo la policy SELinux.

Quando la classe Application viene avviata, passa le impostazioni dei caratteri 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 di caratteri in AOSP per mostrare i propri marchi. Android 12 supporta questa funzionalità, ma aggiunge requisiti per mantenere aggiornati i caratteri emoji nei dispositivi. Gli 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 /system/etc/fonts.xml . Tieni presente i tre modi seguenti in cui puoi personalizzare i tuoi caratteri:

  1. Sostituisci il file NotoColorEmoji.ttf con un carattere emoji con marchio OEM.
  2. Modifica il file NotoColorEmoji.ttf per le esigenze del tuo mercato locale.
  3. Sostituisci o modifica altri file di caratteri.

Se non stai modificando i caratteri emoji in AOSP, non è necessario intervenire. 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 file dei caratteri emoji con marchio OEM, inserisci il carattere emoji appena prima della catena di fallback dei caratteri:

  1. Inserisci il tuo carattere, chiamato OEMCustomEmoji.ttf , nella partizione /system .
  2. 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:

  1. Crea il tuo file NotoColorEmoji con un nome diverso; ad esempio, chiamalo Modified\_NotoColorEmoji.ttf .
  2. 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 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 nel cmap.

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

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

Sostituisci o modifica altri file di caratteri

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 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 caratteri che sono stati modificati dai 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 utilizzando i passaggi descritti in Soddisfare i prerequisiti , Firmare i file dei caratteri e Effettuare aggiornamenti dei caratteri in fase di esecuzione .

Soddisfare i prerequisiti

Il meccanismo di aggiornamento dei caratteri utilizza la funzionalità del kernel Linux fs-verity . Verifica che il tuo dispositivo sia compatibile con fs-verity e includi il certificato nel dispositivo.

Firma file di 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 .

Effettua aggiornamenti dei caratteri in fase di esecuzione

L'app di sistema FontManger esegue gli aggiornamenti dei caratteri. L'app FontManager fornisce lo stato dei caratteri di sistema più recenti installati e la possibilità di aggiornare i file dei caratteri con le firme. Per chiamare le app di aggiornamento, aggiungi la UPDATE_FONT signature|privileged alla lista consentita delle app e al file manifest .

Fornisci la UPDATE_FONT signature|privileged alla funzione di aggiornamento della tua app.