Mulai Android 15, font variabel dirender saat
runtime dengan efisiensi dan perincian yang lebih baik. Dengan update ini, vendor harus
menambahkan konfigurasi font variabel baru ke
font_fallback.xml
bukan fonts.xml
, karena fonts.xml
tidak digunakan lagi.
Lihat Dukungan untuk font variabel untuk mengetahui informasi selengkapnya.
Di Android 11 dan yang lebih lama, mengupdate file font yang diinstal perangkat di AOSP (di
partisi /system/fonts
) atau partisi vendor (di partisi /product/fonts
atau
/system/fonts
) memerlukan update sistem dari OEM. Persyaratan
ini memiliki dampak signifikan pada kompatibilitas emoji. Di
Android 12, Anda dapat menggunakan layanan sistem
FontManager
untuk mengelola file font yang diinstal dan mengupdate file font yang diinstal perangkat
tanpa update sistem.
Android 12 menampilkan tiga interaksi proses;
FontManagerService
, Font Updater
, dan Application
.
FontManagerService
adalah sistem pengelolaan pusat di server sistem.
FontManagerService
menyimpan setelan font sistem terbaru per pengguna.
FontUpdater
adalah updater font plug-in yang dipercaya oleh
pemeriksaan izin signature|privileged
. FontUpdater
berkomunikasi dengan
FontManagerService
untuk mendapatkan, menginstal, menghapus, atau memperbarui setelan font
sistem saat ini. FontUpdater
dapat meneruskan konten file font baru melalui mekanisme
komunikasi antarproses (IPC). FontManagerService
menyimpan konten ke
lokasi penyimpanan yang dapat dibaca secara global, seperti dalam file /data/fonts
. Penyimpanan
ini dijaga. File ini dapat ditulis oleh FontManagerService
saja, berdasarkan
kebijakan SELinux.
Saat diluncurkan, class Application
akan meneruskan setelan font sistem sebagai
argumen metode bindApplication
; lalu menginisialisasi setelan font
untuk digunakan oleh proses aplikasi.
Dukungan untuk font variabel
Mulai Android 15, konfigurasi font variabel
ditentukan dalam
font_fallback.xml
menggunakan format berikut:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
Dalam format ini, font variabel memiliki semua atribut font statis dengan
atribut supportedAxes
tambahan. Atribut supportedAxes
adalah
daftar tag sumbu yang didukung dan dipisahkan koma. Dengan
Android 15, hanya sumbu wght
dan ital
yang dapat
ditentukan.
Jika atribut supportedAxes
tidak ditentukan, node font
berfungsi sebagai font statis dari satu instance font variabel yang ditentukan dengan turunan axis
.
Jika atribut supportedAxes
ditentukan, sistem akan membuat
instance font secara dinamis untuk nilai gaya dan bobot yang diberikan saat runtime.
Developer dapat menggunakan android.graphics.fonts.SystemFonts#getAvailableFonts
Java API atau ASystemFontIterator_open
NDK API untuk mendapatkan daftar file font yang diinstal sistem. Untuk informasi tentang
API developer yang mendukung update ini, lihat
OpenType Variable Font API yang Ditingkatkan
dan buildVariableFamily
.
Menyesuaikan font
Beberapa OEM menginstal atau mengganti file font di AOSP untuk menampilkan merek mereka. Android 12 mendukung fungsi ini, tetapi menambahkan persyaratan agar font emoji terus diupdate di perangkat. OEM yang tidak mengubah atau mengupdate file font emoji tidak perlu menggunakan fitur ini.
Google mengupdate file font, terutama file NotoColorEmoji
melalui GMS
Core, jadi jangan ubah atau hapus file NotoColorEmoji.ttf
dari
partisi /system
, dan jangan hapus dari
/frameworks/base/data/fonts/fonts.xml
.
Perhatikan tiga cara berikut untuk menyesuaikan font:
- Ganti file
NotoColorEmoji.ttf
dengan font emoji bermerek OEM. - Ubah file
NotoColorEmoji.ttf
untuk kebutuhan pasar lokal Anda. - Mengganti atau mengubah file font lainnya.
Jika tidak mengubah font emoji di AOSP, Anda tidak perlu melakukan tindakan apa pun. Jika Anda ingin menyesuaikan font emoji, gunakan petunjuk di bagian berikut.
Mengganti NotoColorEmoji.ttf dengan font emoji bermerek OEM
Untuk mengganti file NotoColorEmoji.ttf
dengan file font emoji bermerek OEM,
tempatkan font emoji tepat sebelum rantai penggantian font:
- Tempatkan font Anda sendiri, yang disebut
OEMCustomEmoji.ttf
, di partisi/system
. Ubah
/frameworks/base/data/fonts/fonts.xml
(dan/frameworks/base/data/fonts/font-fallback.xml
di Android 15 dan yang lebih baru) seperti dalam kode berikut:<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>
Mengubah NotoColorEmoji.ttf untuk kebutuhan pasar lokal
Ikuti langkah-langkah berikut untuk menyesuaikan dengan kebutuhan pasar lokal Anda:
- Buat file
NotoColorEmoji
Anda sendiri dengan nama yang berbeda; misalnya, beri namaModified\_NotoColorEmoji.ttf
. - Tempatkan sebelum file
NotoColorEmoji.ttf
asli.
Setelah Anda melakukan langkah 2, glyph yang diubah dan didukung oleh
Modified\NotoColorEmoji.ttf
akan ditampilkan, bukan NotoColorEmoji.ttf
asli.
Google merekomendasikan hal berikut:
- Hanya memiliki glyph yang diperlukan dalam font ini.
- Delegasikan glyph yang tidak diubah ke file
NotoColorEmoji.ttf
asli sehingga perangkat Anda menerima perbaikan desain apa pun yang dilakukan dalam rilis emoji mendatang.
Menghapus glyph: Untuk menghapus glyph dari file NotoColorEmoji.ttf
, ikuti
langkah 1 dan 2, lalu tentukan glyph ID = 0
di cmap Anda.
Gunakan flag regional: Jika glyph target adalah flag regional, tentukan
ID glyph sebagai kode negara yang tidak diketahui. (Gunakan country code = "ZZ"
.)
Membuat glyph tofu: Anda dapat menentukan ID glyph tofu secara eksplisit jika ingin menggunakannya. Saat Anda menentukan glyphID = 0
, aplikasi terkait akan menafsirkannya sebagai
"glif tidak tersedia". Misalnya, saat Anda menggunakan atribut ini, aplikasi Paint#hasGlyph
akan menampilkan false
.
Mengganti atau mengubah file font lainnya
Untuk mengganti atau mengubah font lain, penyesuaian ini mirip dengan penyesuaian untuk mengubah file TTF untuk kebutuhan pasar lokal. File font yang tidak dikenal yang diupdate di AOSP saat runtime akan diabaikan, dan tidak diupdate. Google mengabaikan font yang tidak dikenal di perangkat Anda. Hal ini mencakup file font yang dimodifikasi dari font asli di AOSP.
Meskipun update font dilakukan oleh Google di GMS Core, mekanisme update font umum terbuka untuk semua OEM. OEM dapat menginstal updater font tambahan menggunakan langkah-langkah di Memenuhi prasyarat, Menandatangani file font, dan Membuat update font runtime.
Memenuhi prasyarat
Mekanisme update font menggunakan fitur kernel Linux fs-verity
. Verifikasi bahwa
perangkat Anda mematuhi fs-verity
dan sertakan sertifikat di perangkat Anda.
Menandatangani file font
Karena file font adalah resource berisiko, file tersebut harus diverifikasi dengan kunci tepercaya.
Tinjau dengan cermat semua file font yang akan diperbarui, dan tanda tangani dengan
kunci pribadi Anda. Tanda tangan harus kompatibel denganfs-verity
.
Membuat pembaruan font runtime
Aplikasi sistem FontManager
melakukan update font. Aplikasi FontManager
memberikan status font sistem yang diinstal terbaru dan kemampuan untuk mengupdate file
font dengan tanda tangan. Untuk memanggil aplikasi update, tambahkan
izin UPDATE_FONT signature|privileged
ke
daftar aplikasi yang diizinkan,
dan ke manifes.
Berikan izin UPDATE_FONT signature|privileged
ke fungsi update
aplikasi Anda.