Di Android 11 dan yang lebih rendah, memperbarui file font yang diinstal perangkat di AOSP (di
partisi /system/fonts
) atau partisi vendor (di /product/fonts
atau
/system/fonts
) memerlukan update sistem dari OEM. Ini
memiliki dampak signifikan terhadap kompatibilitas emoji. Di beberapa
Android 12, Anda dapat menggunakan sistem FontManager
layanan untuk mengelola file font yang terinstal dan memperbarui file font yang diinstal di perangkat
tanpa pembaruan sistem.
Android 12 menampilkan tiga interaksi proses;
FontManagerService
, Font Updater
, dan Application
.
FontManagerService
adalah sistem pengelolaan terpusat di server sistem.
FontManagerService
menyimpan setelan font sistem per pengguna terbaru.
FontUpdater
adalah updater font yang dapat dicocokkan yang dipercaya oleh
Pemeriksaan izin signature|privileged
. FontUpdater
berkomunikasi dengan
FontManagerService
untuk mendapatkan, menginstal, menghapus, atau mengupdate font sistem saat ini
setelan. FontUpdater
dapat meneruskan konten file font baru melalui antarproses
mekanisme komunikasi (IPC). FontManagerService
menyimpan konten ke
lokasi penyimpanan yang dapat dibaca dunia, seperti dalam file /data/fonts
. Ini
penyimpanan dilindungi. Isian ini dapat ditulis oleh FontManagerService
hanya, oleh
Kebijakan SELinux.
Saat class Application
diluncurkan, class ini akan meneruskan setelan font sistem sebagai
argumen metode bindApplication
; kemudian menginisialisasi pengaturan {i>font<i}
untuk digunakan oleh proses aplikasi.
Sesuaikan 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 diperbarui di perangkat. OEM yang tidak memodifikasi atau memperbarui file font emoji yang tidak perlu menggunakan fitur ini.
Google memperbarui file font, terutama file NotoColorEmoji
melalui GMS
Inti, jadi jangan mengubah atau menghapus file NotoColorEmoji.ttf
dari
partisi /system
, dan jangan menghapusnya dari /system/etc/fonts.xml
. Perhatikan
berikut tiga cara untuk dapat menyesuaikan font Anda:
- Ganti file
NotoColorEmoji.ttf
dengan font emoji bermerek OEM. - Ubah file
NotoColorEmoji.ttf
untuk kebutuhan pasar lokal Anda. - Ganti atau ubah file font lainnya.
Jika tidak memodifikasi font emoji di AOSP, Anda tidak perlu melakukan tindakan apa pun. Jika yang ingin Anda sesuaikan font emoji, gunakan petunjuk berikut bagian.
Mengganti NotoColorEmoji.ttf dengan font emoji bermerek OEM
Untuk mengganti file NotoColorEmoji.ttf
dengan file font emoji bermerek OEM Anda,
tempatkan font emoji tepat sebelum rantai penggantian font:
- Tempatkan font Anda sendiri, yang disebut
OEMCustomEmoji.ttf
, di partisi/system
. Ubah
/system/etc/fonts.xml
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:
- Membuat 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 dimodifikasi didukung oleh
Modified\NotoColorEmoji.ttf
akan ditampilkan, bukan NotoColorEmoji.ttf
yang asli.
Google merekomendasikan hal berikut:
- Hanya memiliki glyph yang diperlukan dalam font ini.
- Delegasikan glyph yang tidak dimodifikasi ke file
NotoColorEmoji.ttf
asli sehingga perangkat Anda akan menerima perbaikan desain apa pun yang dibuat dalam rilis emoji mendatang.
Menghapus glyph: Untuk menghapus glyph dari file NotoColorEmoji.ttf
, ikuti
langkah 1 dan 2, serta tentukan glyph ID = 0
di cmap Anda.
Gunakan tanda wilayah: Jika glyph target adalah bendera wilayah, tentukan
ID glyph sebagai kode negara yang tidak diketahui. (Gunakan country code = "ZZ"
.)
Membuat glyph tahu: Anda dapat menentukan ID glyph tahu secara eksplisit jika menginginkannya
untuk menggunakannya. Saat Anda menentukan glyphID = 0
, aplikasi terkait akan menafsirkannya sebagai
“glyph tidak tersedia”. Misalnya, jika Anda menggunakan atribut ini,
Aplikasi Paint#hasGlyph
menampilkan false
.
Mengganti atau mengubah file font lainnya
Untuk mengganti atau memodifikasi {i>font<i} lain, penyesuaiannya serupa dengan memodifikasi file TTF untuk kebutuhan pasar lokal. File font tidak dikenal yang yang diupdate dalam AOSP saat runtime akan diabaikan, dan tidak diupdate. Google mengabaikan font yang tidak dikenal di perangkat Anda. Ini termasuk file {i>font<i} yang dimodifikasi dari font asli dalam AOSP.
Meskipun pembaruan {i>font<i} dilakukan oleh Google di GMS Core, {i>font<i} yang umum diperbarui terbuka untuk semua OEM. OEM dapat menginstal updater font tambahan menggunakan langkah-langkah di Prasyarat rapat, Menandatangani file font, dan Membuat pembaruan font runtime.
Penuhi prasyarat
Mekanisme update font menggunakan fitur kernel Linux fs-verity
. Verifikasi bahwa
perangkat Anda telah mematuhi fs-verity
dan menyertakan sertifikat tersebut dalam perangkat Anda.
Menandatangani file font
Karena file font adalah resource yang berisiko, file tersebut harus diverifikasi dengan kunci tepercaya.
Tinjau dengan cermat semua file {i>font<i} yang akan diperbarui, dan tanda tangani dengan
kunci pribadi. Tanda tangan harus kompatibel dengan fs-verity
.
Membuat pembaruan font runtime
Aplikasi Sistem FontManger
melakukan pembaruan font. Aplikasi FontManager
menyediakan
status font sistem yang terbaru dan kemampuan untuk memperbarui file font
dengan tanda tangan. Untuk memanggil aplikasi update, tambahkan UPDATE_FONT signature|privileged
ke daftar aplikasi yang diizinkan,
dan ke manifes Anda.
Berikan izin UPDATE_FONT signature|privileged
ke updater aplikasi Anda
.