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:
- Zastąp plik
NotoColorEmoji.ttf
czcionką emoji marki OEM. - Zmodyfikuj plik
NotoColorEmoji.ttf
pod kątem potrzeb 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 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:
- Umieść własną czcionkę o nazwie
OEMCustomEmoji.ttf
na partycji/system
. 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:
- Utwórz własny plik
NotoColorEmoji
o innej nazwie; na przykład nadaj mu nazwęModified\_NotoColorEmoji.ttf
. - 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.