Począwszy od Androida 15 czcionki zmienne są renderowane w czasie działania z większą wydajnością i z większą szczegółowością. Po tej aktualizacji dostawcy będą musieli
dodać nowe konfiguracje czcionek zmiennych do
font_fallback.xml
zamiast fonts.xml
, ponieważ opcja fonts.xml
została wycofana.
Więcej informacji znajdziesz w sekcji 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 znaczny wpływ na zgodność emotikonów. Na Androidzie 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 obejmuje 3 interakcje między procesami:
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 możliwy do podłączenia aktualizator czcionek, który cieszy się zaufaniem w ramach kontroli 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 czcionek za pomocą mechanizmów komunikacji między procesami (IPC). FontManagerService
zapisuje zawartość w dostępnym dla wszystkich miejscu przechowywania, np. w plikach /data/fonts
. Te dane są chronione. 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
Począwszy od Androida 15 konfiguracje zmiennych czcionek są określane w sekcji font_fallback.xml
w tym formacie:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
W tym formacie czcionka zmiennej zawiera wszystkie atrybuty czcionki statycznej oraz dodatkowy atrybut supportedAxes
. Atrybut supportedAxes
to rozdzielana przecinkami lista obsługiwanych tagów 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ą elementu podrzędnego axis
.
Jeśli atrybut supportedAxes
jest określony, system dynamicznie tworzy instancję czcionki dla danej wartości grubości i stylu w czasie wykonywania.
Programiści mogą użyć interfejsu android.graphics.fonts.SystemFonts#getAvailableFonts
Java API lub ASystemFontIterator_open
API NDK, aby uzyskać listę plików czcionek zainstalowanych w systemie. Informacje o interfejsach API dla programistów obsługujących tę aktualizację znajdziesz w artykułach o ulepszonym interfejsie OpenType variable Font API i w buildVariableFamily
.
Dostosuj czcionki
Niektórzy producenci OEM instalują lub zastępują pliki czcionek w AOSP, aby wyświetlać swoje marki. Android 12 obsługuje tę funkcję, ale obowiązują dodatkowe wymagania dotyczące aktualizowania czcionek emotikonów 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
, korzystając z rdzenia GMS, więc nie modyfikuj ani nie usuwaj pliku NotoColorEmoji.ttf
z partycji /system
ani nie usuwaj go z /frameworks/base/data/fonts/fonts.xml
.
Pamiętaj, że czcionki możesz dostosowywać na trzy sposoby:
- Zastąp plik
NotoColorEmoji.ttf
czcionką emotikonu marki OEM. - Zmodyfikuj plik
NotoColorEmoji.ttf
pod kątem potrzeb rynku lokalnego. - zastępować lub modyfikować inne pliki czcionek;
Jeśli nie modyfikujesz czcionek emotikonów w AOSP, nie musisz nic robić. Jeśli chcesz dostosować czcionki emotikonów, skorzystaj z instrukcji w następnych sekcjach.
Zastąp plik NotoColorEmoji.ttf czcionkami emotikonów marki OEM
Aby zastąpić plik NotoColorEmoji.ttf
plikiem z czcionkami emotikonów marki OEM, umieść czcionkę tuż przed łańcuchem kreacji zastępczych:
- Umieść własną czcionkę o nazwie
OEMCustomEmoji.ttf
w partycji/system
. Zmodyfikuj
/frameworks/base/data/fonts/fonts.xml
(oraz/frameworks/base/data/fonts/font-fallback.xml
w Androidzie 15 i nowszych) 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ć stronę 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 wyświetlać się zmodyfikowany glif obsługiwany przez Modified\NotoColorEmoji.ttf
.
Google zaleca:
- Używaj tylko niezbędnych glifów w tej czcionce.
- Przypisz niezmodyfikowane glify do oryginalnego pliku
NotoColorEmoji.ttf
, aby Twoje urządzenia otrzymywały poprawki projektowe wprowadzone w przyszłych wersjach emotikonów.
Usuwanie glifów: aby usunąć glify z pliku NotoColorEmoji.ttf
, wykonaj kroki 1 i 2 oraz wpisz glyph ID = 0
w mapie.
Użyj flagi regionalnej: jeśli docelowy glif jest flagą regionu, 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. Gdy 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 aktualizowane w AOSP w czasie działania 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. OEM może instalować dodatkowe aktualizatory czcionek, wykonując czynności opisane w sekcjach Wymagania wstępne Meet, Podpisywanie plików czcionek i Wprowadzanie aktualizacji czcionek w czasie działania.
Spełnij wymagania wstępne
Mechanizm aktualizacji czcionek korzysta z funkcji jądra systemu Linux fs-verity
. Sprawdź, czy Twoje urządzenie jest zgodne z zasadami fs-verity
, i umieść na nim certyfikat.
Podpisywanie plików czcionek
Pliki czcionek to ryzykowne zasoby, dlatego trzeba je zweryfikować za pomocą zaufanych kluczy.
Uważnie przejrzyj wszystkie pliki czcionek, które chcesz zaktualizować, i podpisz się kluczem prywatnym. Podpis musi być zgodny z fs-verity
.
Aktualizuj czcionkę w czasie działania
Aplikacja systemowa FontManager
aktualizuje czcionki. Aplikacja FontManager
zapewnia najnowszy stan zainstalowanego czcionki systemowej i możliwość aktualizowania plików czcionek za pomocą podpisów. Aby wywoływać aplikacje aktualizujące, dodaj uprawnienie UPDATE_FONT signature|privileged
do listy dozwolonych aplikacji i do pliku manifestu.
Przyznaj funkcji aktualizatora aplikacji uprawnienie UPDATE_FONT signature|privileged
.