Od Androida 15 czcionki zmienne są renderowane w czasie działania z większą wydajnością i dokładnością. W związku z tą zmianą 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 aktualizacja 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. Ten wymóg ma znaczący wpływ na zgodność emoji. W Androidzie 12 możesz używać FontManager
usługi systemowejFontManager
do zarządzania zainstalowanymi plikami czcionek i aktualizowania ich na urządzeniu bez aktualizacji systemu.
Android 12 ma 3 interakcje procesów:FontManagerService
, Font Updater
i Application
.
FontManagerService
to centralny system zarządzania na serwerze systemowym.
FontManagerService
przechowuje najnowsze ustawienia czcionki systemowej dla poszczególnych użytkowników.
FontUpdater
to wtykowy moduł aktualizacji czcionek, który jest zaufany przez sprawdzanie uprawnień signature|privileged
. FontUpdater
komunikuje się z FontManagerService
, aby pobierać, instalować, usuwać lub aktualizować bieżące ustawienia czcionki systemowej. FontUpdater
może przekazywać nową zawartość pliku czcionki za pomocą mechanizmów komunikacji międzyprocesowej (IPC). FontManagerService
zapisuje zawartość w lokalizacji pamięci masowej dostępnej do odczytu dla wszystkich, np. w plikach /data/fonts
. Ten
magazyn jest chroniony. Może być zapisana FontManagerService
tylko przez zasady SELinux.
Gdy uruchamia się klasa Application
, 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 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 z dodatkowym atrybutem 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 statyczna czcionka 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 podanej wartości wagi i stylu w czasie działania.
Deweloperzy mogą używać android.graphics.fonts.SystemFonts#getAvailableFonts
interfejsu Java API lub ASystemFontIterator_open
interfejsu 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 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 dodaje wymagania dotyczące aktualizowania 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 pomocą GMS Core, więc nie modyfikuj ani nie usuwaj pliku NotoColorEmoji.ttf
z partycji /system
ani z /frameworks/base/data/fonts/fonts.xml
.
Pamiętaj, że czcionki możesz dostosować na 3 sposoby:
- Zastąp plik
NotoColorEmoji.ttf
czcionką emoji z logo producenta OEM. - Zmodyfikuj plik
NotoColorEmoji.ttf
, aby dostosować go do potrzeb lokalnego rynku. - zastępować ani modyfikować innych plików czcionek;
Jeśli nie modyfikujesz czcionek emoji w AOSP, nie musisz nic robić. Jeśli chcesz dostosować czcionki emoji, skorzystaj z instrukcji w kolejnych sekcjach.
Zastąpienie pliku NotoColorEmoji.ttf czcionkami emoji z logo OEM
Aby zastąpić plik NotoColorEmoji.ttf
plikiem czcionek emoji z logo producenta OEM, umieść czcionkę emoji tuż przed łańcuchem czcionek zastępczych:
- Umieść własną czcionkę o nazwie
OEMCustomEmoji.ttf
w partycji/system
. Zmodyfikuj
/frameworks/base/data/fonts/fonts.xml
(i/frameworks/base/data/fonts/font-fallback.xml
w Androidzie 15 i nowszym) 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ć informacje do potrzeb lokalnego rynku, wykonaj te czynności:
- Utwórz własny plik
NotoColorEmoji
o innej nazwie, np.Modified\_NotoColorEmoji.ttf
. - Umieść go przed oryginalnym plikiem
NotoColorEmoji.ttf
.
Po wykonaniu kroku 2 zmodyfikowany znak obsługiwany przez
Modified\NotoColorEmoji.ttf
będzie wyświetlany zamiast oryginalnego znaku NotoColorEmoji.ttf
.
Google zaleca:
- zawierać tylko niezbędny glif;
- Przekaż niezmodyfikowane glify do oryginalnego
NotoColorEmoji.ttf
pliku, aby urządzenia otrzymywały poprawki projektu wprowadzone w przyszłych wersjach emoji.
Usuwanie glifów: aby usunąć glify z pliku NotoColorEmoji.ttf
, wykonaj kroki 1 i 2 oraz w mapie znaków określ glyph ID = 0
.
Użyj flagi regionalnej: jeśli docelowy znak to flaga regionalna, podaj identyfikator znaku jako nieznany kod kraju. (Użyj country code = "ZZ"
).
Utwórz glif tofu: możesz wyraźnie określić identyfikator glifu tofu, jeśli chcesz go użyć. Jeśli określisz wartość glyphID = 0
, powiązana aplikacja zinterpretuje ją jako „glif jest niedostępny”. Na przykład, gdy użyjesz tego atrybutu, aplikacja Paint#hasGlyph
zwróci false
.
Zastępowanie lub modyfikowanie innych plików czcionek
Zastępowanie i modyfikowanie innych czcionek jest podobne do modyfikowania plików TTF na potrzeby rynku lokalnego. 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. Obejmuje to pliki czcionek zmodyfikowane na podstawie oryginalnych czcionek w AOSP.
Aktualizacje czcionek są przeprowadzane przez Google w GMS Core, ale ogólny mechanizm aktualizacji czcionek jest dostępny dla wszystkich producentów OEM. Producenci OEM mogą instalować dodatkowe programy do aktualizacji czcionek, wykonując czynności opisane w sekcjach Wymagania wstępne, 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 wymaganiami fs-verity
, i dołącz certyfikat do urządzenia.
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ćfs-verity
zgodny.
Wprowadzanie zmian w czcionkach w czasie działania
Aktualizacje czcionek przeprowadza FontManager
aplikacja systemowa. Aplikacja FontManager
podaje stan najnowszej zainstalowanej czcionki systemowej i umożliwia aktualizowanie plików czcionek za pomocą podpisów. Aby wywoływać aplikacje do aktualizacji, dodaj uprawnienie UPDATE_FONT signature|privileged
do listy dozwolonych aplikacji i do pliku manifestu.
Przyznaj funkcji aktualizatora aplikacji uprawnienie UPDATE_FONT signature|privileged
.