Wdrażanie niestandardowych czcionek zastępczych

W systemie Android 11 i starszych aktualizowanie plików czcionek zainstalowanych na urządzeniu w AOSP (na partycji /system/fonts ) lub na partycjach dostawcy (na partycjach /product/fonts lub /system/fonts ) wymaga aktualizacji systemu od producenta OEM. To wymaganie ma znaczący wpływ na kompatybilność emoji. W systemie Android 12 możesz użyć 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 procesów; FontManagerService , Font Updater i Application .

FontManagerService to centralny system zarządzania na serwerze systemowym. FontManagerService przechowuje najnowsze ustawienia czcionek systemowych na użytkownika.

FontUpdater jest podłączanym aktualizatorem czcionek, któremu zaufane jest sprawdzanie uprawnień signature|privileged FontUpdater komunikuje się z FontManagerService , aby pobrać, zainstalować, usunąć lub zaktualizować bieżące ustawienia czcionek systemowych. FontUpdater może przekazywać nową zawartość pliku czcionek za pomocą mechanizmów komunikacji międzyprocesowej (IPC). Usługa FontManagerService zapisuje zawartość w czytelnej na całym świecie lokalizacji przechowywania, na przykład w plikach /data/fonts . Ten magazyn jest strzeżony. Może być napisany tylko przez FontManagerService , zgodnie z polityką SELinux.

Po uruchomieniu klasa Application przekazuje ustawienia czcionek systemowych jako argumenty metody bindApplication ; następnie inicjuje ustawienia czcionek do użycia przez proces aplikacji.

Wdrażanie niestandardowych czcionek

Niektórzy producenci OEM instalują lub zastępują pliki czcionek w AOSP, aby pokazać swoje marki. Android 12 obsługuje tę funkcję, ale dodaje wymagania, aby aktualizować czcionki 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 pomocą 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 zgodnie z potrzebami 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 w poniższych sekcjach.

Zastąpienie 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 jak w poniższym kodzie:

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

Modyfikowanie NotoColorEmoji.ttf do potrzeb lokalnego rynku

Wykonaj poniższe czynności, aby dostosować je do potrzeb lokalnego rynku:

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

Po wykonaniu kroku 2 zmodyfikowany glif obsługiwany przez Modified\NotoColorEmoji.ttf jest wyświetlany zamiast oryginalnego NotoColorEmoji.ttf . Google zaleca następujące czynności:

  • W tej czcionce masz tylko niezbędny glif.
  • Przekaż niezmodyfikowane glify do oryginalnego pliku NotoColorEmoji.ttf , aby Twoje urządzenia otrzymywał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 swoim cmap.

Użyj flagi regionalnej: jeśli docelowy glif 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ć. Gdy określisz glyphID = 0 , powiązana aplikacja zinterpretuje to jako „glif jest niedostępny”. Na przykład, gdy używasz tego atrybutu, aplikacja Paint#hasGlyph zwraca false .

Zastąp lub zmodyfikuj inne pliki czcionek

Aby zastąpić lub zmodyfikować inne czcionki, dostosowanie jest podobne do modyfikacji plików tff na potrzeby lokalnego rynku. 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 otwarty dla wszystkich producentów OEM. Producenci OEM mogą zainstalować dodatkowe programy do aktualizacji czcionek, wykonując czynności opisane w Spełnianie wymagań wstępnych , Podpisywanie plików czcionek i Aktualizowanie czcionek w czasie wykonywania .

Wymagania dotyczące spotkania

Mechanizm aktualizacji czcionek korzysta z funkcji jądra fs-verity Linux. Sprawdź, czy Twoje urządzenie jest zgodne z fs-verity i dołącz do niego certyfikat.

Podpisywanie plików czcionek

Ponieważ pliki czcionek są niebezpiecznymi zasobami, należy je zweryfikować za pomocą zaufanych kluczy. Uważnie przejrzyj wszystkie pliki czcionek, które mają zostać zaktualizowane, i podpisz się swoim kluczem prywatnym. Podpis musi być zgodny fs-verity .

Dokonywanie aktualizacji czcionek w czasie wykonywania

Aplikacja FontManger System wykonuje aktualizacje czcionek. Aplikacja FontManager zapewnia najnowszy stan zainstalowanych czcionek systemowych i możliwość aktualizacji plików czcionek za pomocą sygnatur. Aby wywoływać aplikacje aktualizujące, dodaj uprawnienie UPDATE_FONT signature|privileged do listy dozwolonych aplikacji i do manifestu .

UPDATE_FONT signature|privileged uprawnienie do funkcji aktualizacji aplikacji.