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:
- Zastąp plik
NotoColorEmoji.ttf
czcionką emoji marki OEM. - Zmodyfikuj plik
NotoColorEmoji.ttf
zgodnie z potrzebami lokalnego rynku. - 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:
- Umieść własną czcionkę o nazwie
OEMCustomEmoji.ttf
na partycji/system
. 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:
- Utwórz własny plik
NotoColorEmoji
o innej nazwie; na przykład nazwij goModified\_NotoColorEmoji.ttf
. - 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.