Począwszy od Androida 15 zmienne fonty są renderowane w czasie wykonywania z większą wydajnością i dokładnością. 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 klasa Application
jest uruchamiana, przekazuje 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 aktualizacji czcionek emoji 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 zastępczych:
- 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 projektowe 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 glifu 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 podobnej metody do dostosowywania plików TTF do 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.