Od Androida 15 czcionki zmienne są renderowane w czasie działania z większą wydajnością i szczegółowością. W ramach tej aktualizacji dostawcy muszą
dodawać 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 wersjach aktualizowanie plików czcionek zainstalowanych na urządzeniu w AOSP (w partycji /system/fonts) lub w partycjach dostawcy (w partycjach /product/fonts lub /system/fonts) wymaga aktualizacji systemu od producenta OEM. To wymaganie ma znaczący wpływ na zgodność z emotikonami. W 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 procesów: FontManagerService, Font Updater i Application.
FontManagerService to centralny system zarządzania na serwerze systemowym.
FontManagerService przechowuje najnowsze ustawienia czcionek systemowych dla każdego użytkownika.
FontUpdater to wtyczka do aktualizowania czcionek, która jest zaufana dzięki sprawdzeniu uprawnień signature|privileged. FontUpdater komunikuje się z FontManagerService, aby pobierać, instalować, usuwać lub aktualizować bieżące ustawienia czcionek systemowych. FontUpdater może przekazywać nowe treści plików czcionek za pomocą mechanizmów komunikacji międzyprocesowej (IPC). FontManagerService zapisuje treści w lokalizacji pamięci dostępnej do odczytu dla wszystkich, np. w plikach /data/fonts. Ta pamięć jest chroniona. Zapisywać w niej może FontManagerService tylko za pomocą
zasad SELinux.
Gdy uruchamia się klasa Application, przekazuje ona ustawienia czcionek systemowych jako
argumenty metody bindApplication, a następnie inicjuje ustawienia czcionek
do użycia przez proces aplikacji.
Obsługa czcionek zmiennych
Od Androida 15 konfiguracje czcionek zmiennych są
określane 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 oraz dodatkowy atrybut supportedAxes. Atrybut supportedAxes to rozdzielona 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 pojedynczej instancji 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 wagi i stylu w czasie działania.
Programiści mogą używać interfejsu android.graphics.fonts.SystemFonts#getAvailableFonts
Java API lub interfejsu ASystemFontIterator_open
NDK API, aby uzyskać listę plików czcionek zainstalowanych w systemie. Informacje o
interfejsach API dla programistów, które obsługują tę aktualizację, znajdziesz w artykułach
Ulepszony interfejs OpenType Variable Font API
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 dodaje wymagania dotyczące aktualizowania czcionek emotikon na urządzeniach. Producenci OEM, którzy nie modyfikują ani nie aktualizują plików czcionek emotikon, 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 pliku
/frameworks/base/data/fonts/fonts.xml.
Pamiętaj o tych 3 sposobach dostosowywania czcionek:
- Zastąp plik
NotoColorEmoji.ttfczcionką emotikon z logo producenta OEM. - Zmodyfikuj plik
NotoColorEmoji.ttfpod kątem potrzeb lokalnego rynku. - Zastąp lub zmodyfikuj inne pliki czcionek.
Jeśli nie modyfikujesz czcionek emotikon w AOSP, nie musisz podejmować żadnych działań. Jeśli chcesz dostosować czcionki emotikon, postępuj zgodnie z instrukcjami w kolejnych sekcjach.
Zastępowanie pliku NotoColorEmoji.ttf czcionkami emotikon z logo producenta OEM
Aby zastąpić plik NotoColorEmoji.ttf plikiem czcionek emotikon z logo producenta OEM, umieść czcionkę emotikon tuż przed łańcuchem zastępowania czcionek:
- Umieść własną czcionkę o nazwie
OEMCustomEmoji.ttfw partycji/system. Zmodyfikuj plik
/frameworks/base/data/fonts/fonts.xml(oraz/frameworks/base/data/fonts/font-fallback.xmlw Androidzie 15 i nowszych wersjach) zgodnie z tym 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>
Modyfikowanie pliku NotoColorEmoji.ttf pod kątem potrzeb lokalnego rynku
Aby dostosować czcionkę do potrzeb lokalnego rynku:
- Utwórz własny plik
NotoColorEmojio innej nazwie, np. nazwij goModified\_NotoColorEmoji.ttf. - Umieść go przed oryginalnym plikiem
NotoColorEmoji.ttf.
Po wykonaniu kroku 2 zmodyfikowany glif obsługiwany przez
Modified\NotoColorEmoji.ttf będzie wyświetlany zamiast oryginalnego NotoColorEmoji.ttf.
Zalecenia Google:
- W tej czcionce umieść tylko niezbędne glify.
- Przekaż niezmienione glify do oryginalnego pliku
NotoColorEmoji.ttf, aby urządzenia otrzymywały poprawki projektowe wprowadzone w przyszłych wersjach emotikon.
Usuwanie glifów: aby usunąć glify z pliku NotoColorEmoji.ttf, wykonaj kroki 1 i 2 oraz określ glyph ID = 0 w pliku cmap.
Używanie flagi regionalnej: jeśli docelowy glif jest flagą regionalną, określ identyfikator glifu jako nieznany kod kraju. (Użyj country code = "ZZ").
Tworzenie glifu tofu: jeśli chcesz użyć glifu tofu, możesz wyraźnie określić jego identyfikator. Gdy określisz glyphID = 0, powiązana aplikacja zinterpretuje to jako „glif jest niedostępny”. Na przykład, gdy 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, dostosowanie jest podobne do modyfikowania plików TTF pod kątem potrzeb lokalnego rynku. Nieznane pliki czcionek, które są aktualizowane w AOSP w czasie działania, są ignorowane i nie są aktualizowane. Google ignoruje nieznane czcionki na urządzeniu. Dotyczy to plików 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 otwarty dla wszystkich producentów OEM. Producenci OEM mogą instalować dodatkowe aktualizatory czcionek, wykonując czynności opisane w sekcjach Spełnianie wymagań wstępnych, Podpisywanie plików czcionek, i Wprowadzanie aktualizacji czcionek w czasie działania.
Spełnianie wymagań wstępnych
Mechanizm aktualizacji czcionek korzysta z funkcji jądra systemu Linux fs-verity. Sprawdź, czy urządzenie jest zgodne z fs-verity, i umieść na nim certyfikat.
Podpisywanie plików czcionek
Pliki czcionek są zasobami ryzykownymi, dlatego muszą być weryfikowane za pomocą zaufanych kluczy.
Dokładnie sprawdź wszystkie pliki czcionek, które mają zostać zaktualizowane, i podpisz je kluczem prywatnym. Podpis musi być zgodny z fs-verity.
Wprowadzanie aktualizacji czcionek w czasie działania
Aktualizacje czcionek przeprowadza aplikacja systemowa FontManager. Aplikacja FontManager udostępnia najnowszy stan zainstalowanych czcionek systemowych oraz możliwość aktualizowania plików czcionek za pomocą podpisów. Aby wywoływać aktualizacje aplikacji, dodaj uprawnienie
UPDATE_FONT signature|privileged do
listy dozwolonych aplikacji,
i do pliku manifestu.
Przyznaj uprawnienie UPDATE_FONT signature|privileged funkcji aktualizatora aplikacji.