Implementuj niestandardowe czcionki

W systemie Android 11 i starszych aktualizacja plików czcionek zainstalowanych na urządzeniu w AOSP (w partycji /system/fonts ) lub partycjach dostawcy (w partycjach /product/fonts lub /system/fonts ) wymaga aktualizacji systemu od producenta OEM. Wymóg ten ma znaczący wpływ na kompatybilność emoji. W systemie Android 12 możesz używać usługi systemowej FontManager do zarządzania zainstalowanymi plikami czcionek i aktualizowania plików czcionek zainstalowanych na urządzeniu bez aktualizacji systemu.

Android 12 oferuje trzy interakcje procesowe; FontManagerService , Font Updater i Application .

FontManagerService to centralny system zarządzania na serwerze systemowym. FontManagerService przechowuje najnowsze ustawienia czcionek systemowych dla poszczególnych użytkowników.

FontUpdater to podłączany aktualizator czcionek, któremu można zaufać na podstawie signature|privileged sprawdzania uprawnień. FontUpdater komunikuje się z FontManagerService w celu pobrania, zainstalowania, usunięcia lub aktualizacji bieżących ustawień czcionek systemowych. FontUpdater może przekazywać nową zawartość plików czcionek poprzez mechanizmy komunikacji między procesami (IPC). FontManagerService zapisuje zawartość w czytelnej dla wszystkich lokalizacji przechowywania, na przykład w plikach /data/fonts . Magazyn ten jest strzeżony. Może być napisany tylko przez FontManagerService , zgodnie z polityką SELinux.

Po uruchomieniu klasy Application przekazuje ustawienia czcionek systemowych jako argumenty metody bindApplication ; następnie inicjuje ustawienia czcionek do wykorzystania przez proces aplikacji.

Dostosuj czcionki

Niektórzy producenci OEM instalują lub wymieniają pliki czcionek w AOSP, aby pokazać swoje marki. Android 12 obsługuje tę funkcję, ale dodaje wymagania dotyczące aktualizacji czcionek emoji na urządzeniach. Producenci OEM, którzy nie modyfikują ani nie aktualizują plików czcionek emoji, nie muszą korzystać z tej funkcji.

Google aktualizuje pliki czcionek, zwłaszcza pliki NotoColorEmoji , za pośrednictwem GMS Core, więc nie modyfikuj ani nie usuwaj pliku NotoColorEmoji.ttf z partycji /system ani nie usuwaj go z /system/etc/fonts.xml . Zwróć uwagę na następujące trzy sposoby dostosowywania czcionek:

  1. Zastąp plik NotoColorEmoji.ttf czcionką emoji marki OEM.
  2. Zmodyfikuj plik NotoColorEmoji.ttf pod kątem potrzeb lokalnego rynku.
  3. Zastąp lub zmodyfikuj inne pliki czcionek.

Jeśli nie modyfikujesz czcionek emoji w AOSP, nie musisz podejmować żadnych działań. Jeśli chcesz dostosować czcionki emoji, skorzystaj z instrukcji podanych w poniższych sekcjach.

Zastąp plik NotoColorEmoji.ttf czcionkami emoji marki OEM

Aby zastąpić plik NotoColorEmoji.ttf plikiem czcionek emoji marki OEM, umieść czcionkę emoji tuż przed łańcuchem zastępczym czcionek:

  1. Umieść własną czcionkę o nazwie OEMCustomEmoji.ttf na partycji /system .
  2. Zmodyfikuj /system/etc/fonts.xml zgodnie z poniższym kodem:

    <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>
    

Zmodyfikuj plik NotoColorEmoji.ttf pod kątem potrzeb rynku lokalnego

Wykonaj poniższe kroki, aby dostosować do potrzeb lokalnego rynku:

  1. Utwórz własny plik NotoColorEmoji o innej nazwie; na przykład nadaj mu nazwę Modified\_NotoColorEmoji.ttf .
  2. Umieść go przed oryginalnym plikiem NotoColorEmoji.ttf .

Po wykonaniu kroku 2 zmodyfikowany glif obsługiwany przez Modified\NotoColorEmoji.ttf zostanie wyświetlony zamiast oryginalnego NotoColorEmoji.ttf . Google zaleca następujące rozwiązania:

  • Używaj tylko niezbędnych glifów w tej czcionce.
  • Oddeleguj niezmodyfikowane glify do oryginalnego pliku NotoColorEmoji.ttf , aby Twoje urządzenia otrzymały wszelkie poprawki projektowe wprowadzone w przyszłych wydaniach emoji.

Usuń glify: Aby usunąć glify z pliku NotoColorEmoji.ttf , wykonaj kroki 1 i 2 i określ glyph ID = 0 w swojej cmap.

Użyj flagi regionalnej: Jeśli glif docelowy jest flagą regionalną, określ identyfikator glifu jako nieznany kod kraju. (Użyj country code = "ZZ" .)

Utwórz glif tofu: możesz jawnie określić identyfikator glifu tofu, jeśli chcesz go użyć. Jeśli określisz glyphID = 0 , powiązana aplikacja zinterpretuje to jako „glif nie jest dostępny”. Na przykład, jeśli użyjesz tego atrybutu, aplikacja Paint#hasGlyph zwróci false .

Zastąp lub zmodyfikuj inne pliki czcionek

Aby zastąpić lub zmodyfikować inne czcionki, dostosowywanie jest podobne do modyfikowania plików TTF na potrzeby rynku lokalnego. Nieznane pliki czcionek, które są aktualizowane w AOSP w czasie wykonywania, są ignorowane i nie są aktualizowane. Google ignoruje nieznane czcionki na Twoim urządzeniu. Obejmuje to pliki czcionek, które zostały zmodyfikowane z oryginalnych czcionek w AOSP.

Chociaż aktualizacje czcionek są wykonywane przez Google w GMS Core, ogólny mechanizm aktualizacji czcionek jest dostępny dla wszystkich producentów OEM. Producenci OEM mogą zainstalować dodatkowe aktualizatory czcionek, wykonując czynności opisane w temacie Spełnianie wymagań wstępnych , Podpisywanie plików czcionek i Wykonywanie aktualizacji czcionek w czasie wykonywania .

Spełnij wymagania wstępne

Mechanizm aktualizacji czcionek wykorzystuje funkcję jądra systemu Linux fs-verity . Sprawdź, czy Twoje urządzenie jest zgodne z systemem fs-verity i dołącz do niego certyfikat.

Podpisz pliki czcionek

Ponieważ pliki czcionek stanowią ryzykowne zasoby, należy je zweryfikować za pomocą zaufanych kluczy. Dokładnie przejrzyj wszystkie pliki czcionek, które mają zostać zaktualizowane, i podpisz swoim kluczem prywatnym. Podpis musi być zgodny fs-verity .

Dokonaj aktualizacji czcionek w czasie wykonywania

Aplikacja FontManger System wykonuje aktualizacje czcionek. Aplikacja FontManager zapewnia aktualny stan zainstalowanych czcionek systemowych oraz możliwość aktualizacji plików czcionek z podpisami. Aby wywołać aktualizację aplikacji, dodaj UPDATE_FONT signature|privileged podpisu UPDATE_FONT do listy dozwolonych aplikacji i do pliku manifestu .

Podaj UPDATE_FONT signature|privileged uprawnienia do funkcji aktualizacyjnej swojej aplikacji.