Wdrażanie czcionek niestandardowych

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 wghtital.

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:

  1. Zastąp plik NotoColorEmoji.ttf czcionką emotikonu marki OEM.
  2. Zmodyfikuj plik NotoColorEmoji.ttf pod kątem potrzeb rynku lokalnego.
  3. 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:

  1. Umieść własną czcionkę o nazwie OEMCustomEmoji.ttf w partycji /system.
  2. 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:

  1. Utwórz własny plik NotoColorEmoji o innej nazwie, np. Modified\_NotoColorEmoji.ttf.
  2. 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.