Począwszy od Androida 15 zmienne fonty są renderowane w czasie wykonywania z większą wydajnością i precyzją. W ramach tej aktualizacji dostawcy muszą dodać nowe konfiguracje czcionek zmiennych do font_fallback.xml
zamiast do fonts.xml
, ponieważ fonts.xml
jest wycofywany.
Więcej informacji znajdziesz w artykule Obsługa czcionek zmiennych.
W Androidzie 11 i starszych aktualizacja 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 przez OEM. To wymaganie ma znaczący wpływ na zgodność emotikonów. W Androidzie 12 możesz korzystać z usługi systemowej FontManager
, aby zarządzać zainstalowanymi plikami czcionek i aktualizować zainstalowane na urządzeniu pliki czcionek bez aktualizacji systemu.
Android 12 umożliwia 3 interakcje z procesem: FontManagerService
, Font Updater
i Application
.
FontManagerService
to centralny system zarządzania na serwerze systemowym.
FontManagerService
przechowuje najnowsze ustawienia czcionek systemu dla poszczególnych użytkowników.
FontUpdater
to wtyczka do aktualizowania czcionek, której zaufała funkcja sprawdzania uprawnień signature|privileged
. FontUpdater
komunikuje się z FontManagerService
, aby pobierać, instalować, usuwać lub aktualizować bieżące ustawienia czcionek systemowych. FontUpdater
może przekazywać zawartość nowego pliku czcionki za pomocą mechanizmów komunikacji między procesami (IPC). FontManagerService
zapisuje zawartość w dostępnej na świecie lokalizacji pamięci, np. w plikach /data/fonts
. Ten magazyn jest strzeżony. Może być napisany tylko przez FontManagerService
w ramach zasad SELinux.
Gdy uruchamiana jest klasa Application
, przekazuje ona ustawienia czcionki systemowej jako argumenty metody bindApplication
, a następnie inicjuje ustawienia czcionki do użycia przez proces aplikacji.
Obsługa czcionek zmiennych
Od Androida 15 konfiguracje zmiennych czcionek są określone w font_fallback.xml
w tym formacie:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
W tym formacie czcionka zmienna ma wszystkie atrybuty czcionki statycznej z dodatkowym atrybutem supportedAxes
. Atrybut supportedAxes
to lista rozdzielona przecinkami zawierających obsługiwane tagi osi. W Androidzie 15 można określić tylko osie wght
i ital
.
Jeśli atrybut supportedAxes
nie jest określony, węzeł font
działa jako czcionka statyczna pojedynczego wystąpienia czcionki zmiennej określonej za pomocą elementów podrzędnych axis
.
Jeśli atrybut supportedAxes
jest określony, system dynamicznie tworzy instancję czcionki dla danej wartości grubości i stylu w czasie wykonywania.
Aby uzyskać listę zainstalowanych w systemie plików czcionek, deweloperzy mogą użyć interfejsu android.graphics.fonts.SystemFonts#getAvailableFonts
Java API lub interfejsu ASystemFontIterator_open
NDK API. Informacje o interfejsach API dla programistów, które obsługują tę aktualizację, znajdziesz w artykułach Ulepszony interfejs API czcionek zmiennych OpenType i buildVariableFamily
.
Dostosowywanie czcionek
Niektórzy producenci OEM instalują lub zastępują pliki czcionek w AOSP, aby wyświetlać swoje marki. Android 12 obsługuje tę funkcję, ale wymaga, aby czcionki emotikonów były aktualizowane na urządzeniach. Producenci OEM, którzy nie modyfikują ani nie aktualizują plików czcionek emotikonów, 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 z folderu /frameworks/base/data/fonts/fonts.xml
.
Poniżej znajdziesz 3 sposoby dostosowywania czcionek:
- Zastąp plik
NotoColorEmoji.ttf
czcionką emotikonów marki OEM. - Zmodyfikuj plik
NotoColorEmoji.ttf
, aby odpowiadał wymaganiom lokalnego rynku. - Zastępowanie lub modyfikowanie innych plików czcionek.
Jeśli nie modyfikujesz czcionek emotikonów w AOSP, nie musisz nic robić. Jeśli chcesz dostosować czcionki emotikonów, skorzystaj z instrukcji podanych w następnych sekcjach.
Zastąp plik NotoColorEmoji.ttf czcionkami emotikonów marki OEM
Aby zastąpić plik NotoColorEmoji.ttf
plikiem czcionek emotikonów marki OEM, umieść czcionkę emotikonów tuż przed łańcuchem czcionek:
- Umieść własną czcionkę o nazwie
OEMCustomEmoji.ttf
na partycji/system
. Zmodyfikuj
/frameworks/base/data/fonts/fonts.xml
(oraz/frameworks/base/data/fonts/font-fallback.xml
w przypadku Androida 15 i nowszych wersji) w ten sposób:<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 pliku NotoColorEmoji.ttf pod kątem potrzeb lokalnego rynku
Aby dostosować reklamy do potrzeb lokalnego rynku:
- Utwórz własny plik
NotoColorEmoji
o innej nazwie, np.Modified\_NotoColorEmoji.ttf
. - Umieść go przed oryginalnym plikiem
NotoColorEmoji.ttf
.
Po wykonaniu kroku 2 zamiast oryginalnego NotoColorEmoji.ttf
będzie widoczny zmodyfikowany glif obsługiwany przez Modified\NotoColorEmoji.ttf
.
Google zaleca:
- zawierać tylko potrzebne znaki w danej czcionce.
- Przypisz niezmodyfikowane glify do oryginalnego pliku
NotoColorEmoji.ttf
, aby Twoje urządzenia otrzymywały wszelkie poprawki w projektach wprowadzone w przyszłych wersjach emotikonów.
Usuwanie glifów: aby usunąć glify z pliku NotoColorEmoji.ttf
, wykonaj czynności opisane w krokach 1 i 2 oraz określ w pliku cmap wartość glyph ID = 0
.
Używanie flagi regionalnej: jeśli docelowy glyph to flaga regionalna, podaj identyfikator glypha jako nieznany kod kraju. (użyj country code = "ZZ"
).
Utwórz glif tofu: jeśli chcesz użyć glifu tofu, możesz podać jego identyfikator. Jeśli podasz wartość glyphID = 0
, powiązana aplikacja zinterpretuje to jako „glif jest niedostępny”. Jeśli na przykład użyjesz tego atrybutu, aplikacja Paint#hasGlyph
zwróci wartość false
.
Zastępowanie lub modyfikowanie innych plików czcionek
Aby zastąpić lub zmodyfikować inne czcionki, użyj opcji dostosowywania podobnych do tych, które służą do modyfikowania plików TTF pod kątem potrzeb 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 urządzeniu. Obejmuje to pliki czcionek, które zostały zmodyfikowane na podstawie oryginalnych czcionek w AOSP.
Chociaż aktualizacje czcionek są przeprowadzane przez Google w GMS Core, ogólny mechanizm aktualizacji czcionek jest dostępny dla wszystkich producentów OEM. Producenci OEM mogą instalować dodatkowe moduły aktualizacji czcionek, wykonując czynności opisane w artykułach Wymagania wstępne, Podpisywanie plików czcionek i Aktualizowanie czcionek w czasie działania.
Spełnij wymagania wstępne.
Mechanizm aktualizacji czcionek korzysta z funkcji fs-verity
jądra Linuksa. Sprawdź, czy Twoje urządzenie jest zgodne z fs-verity
, i załącz certyfikat na urządzeniu.
Podpisywanie plików czcionek
Ponieważ pliki czcionek są zasobami obarczonymi ryzykiem, muszą zostać zweryfikowane za pomocą zaufanych kluczy.
Uważnie przejrzyj wszystkie pliki czcionek, które mają zostać zaktualizowane, i podpisz je swoim kluczem prywatnym. Podpis musi być zgodny z fs-verity
.
Aktualizowanie czcionek w czasie działania
Aplikacja systemowa FontManager
wykonuje aktualizacje czcionek. Aplikacja FontManager
zapewnia najnowszy stan zainstalowanej czcionki systemowej oraz możliwość aktualizowania plików czcionek z podpisami. Aby wywołać funkcję aktualizacji aplikacji, dodaj uprawnienie UPDATE_FONT signature|privileged
do listy dozwolonych aplikacji i do pliku manifestu.
Przyznaj uprawnienie UPDATE_FONT signature|privileged
funkcji aktualizowania aplikacji.