Zaimplementuj niestandardowe czcionki

W systemie Android 11 i niższych aktualizacja plików czcionek zainstalowanych na urządzeniu w AOSP (na partycji /system/fonts ) lub partycjach dostawcy (na partycjach /product/fonts lub /system/fonts ) wymaga aktualizacji systemu od producenta OEM. To wymaganie ma znaczący wpływ na kompatybilność emotikonów. W Androidzie 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 zawiera trzy interakcje z procesami; 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óry jest zaufany przez kontrolę signature|privileged uprawnień. FontUpdater komunikuje się z FontManagerService , aby uzyskać, zainstalować, usunąć lub zaktualizować bieżące ustawienia czcionek systemowych. FontUpdater może przekazywać nową zawartość pliku czcionek przez mechanizmy komunikacji między procesami (IPC). FontManagerService zapisuje zawartość w miejscu przechowywania, które można odczytać na całym świecie, na przykład w plikach /data/fonts . Ten magazyn jest strzeżony. Może być napisany tylko przez FontManagerService , przez politykę SELinux.

Po uruchomieniu klasa Application przekazuje systemowe ustawienia czcionek jako argumenty metody bindApplication ; następnie inicjuje ustawienia czcionek do użycia 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 aktualizowania 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 i nie usuwaj go z /system/etc/fonts.xml . Zwróć uwagę na 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. Zamień lub zmodyfikuj inne pliki czcionek.

Jeśli nie modyfikujesz czcionek emoji w AOSP, nie musisz podejmować żadnych działań. Jeśli chcesz dostosować czcionki emotikonów, skorzystaj z instrukcji 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 lokalnego rynku

Wykonaj następujące kroki, aby dostosować 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:

  • Miej tylko niezbędny glif w tej czcionce.
  • Deleguj niezmodyfikowane glify do oryginalnego pliku NotoColorEmoji.ttf , aby Twoje urządzenia otrzymały wszelkie poprawki projektowe wprowadzone w przyszłych wydaniach emotikonów.

Usuń glify: aby usunąć glify z pliku NotoColorEmoji.ttf , wykonaj kroki 1 i 2, a następnie podaj glyph ID = 0 w pliku cmap.

Użyj flagi regionalnej: jeśli docelowy glif jest flagą regionalną, podaj 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 w przypadku użycia tego atrybutu aplikacja Paint#hasGlyph zwraca false .

Zamień lub zmodyfikuj inne pliki czcionek

Aby zastąpić lub zmodyfikować inne czcionki, dostosowanie jest podobne do modyfikacji 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 otwarty dla wszystkich producentów OEM. Producenci OEM mogą instalować dodatkowe aktualizatory czcionek, wykonując czynności opisane w sekcjach Spełnianie wymagań wstępnych , Podpisywanie plików czcionek i Dokonywanie 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 fs-verity i dołącz do niego certyfikat.

Podpisz pliki czcionek

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

Dokonaj aktualizacji czcionek środowiska wykonawczego

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

Podaj UPDATE_FONT signature|privileged do funkcji aktualizacji aplikacji.