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
partisi) memerlukan pembaruan 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 memperbarui file font yang diinstal perangkat tanpa pembaruan sistem.
Android 12 menampilkan tiga interaksi proses; FontManagerService
, Font Updater
, dan Application
.
FontManagerService
adalah sistem manajemen pusat di server sistem. FontManagerService
menyimpan pengaturan font sistem per pengguna terbaru.
FontUpdater
adalah pembaru font yang dapat dipasang yang dipercaya oleh signature|privileged
. FontUpdater
berkomunikasi dengan FontManagerService
untuk mendapatkan, menginstal, menghapus, atau memperbarui pengaturan font sistem saat ini. FontUpdater
dapat meneruskan konten file font baru melalui mekanisme komunikasi antar-proses (IPC). FontManagerService
menyimpan konten ke lokasi penyimpanan yang dapat dibaca dunia, seperti di file /data/fonts
. Penyimpanan ini dijaga. Itu hanya dapat ditulis oleh FontManagerService
, dengan kebijakan SELinux.
Saat kelas Application
diluncurkan, ia melewati pengaturan font sistem sebagai argumen dari metode bindApplication
; kemudian menginisialisasi pengaturan font untuk digunakan oleh proses aplikasi.
Menerapkan font khusus
Beberapa OEM menginstal atau mengganti file font di AOSP untuk menunjukkan merek mereka. Android 12 mendukung fungsi ini, tetapi menambahkan persyaratan untuk terus memperbarui font emoji di perangkat. OEM yang tidak mengubah atau memperbarui 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 /system/etc/fonts.xml
. Perhatikan tiga cara berikut untuk 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 Anda tidak mengubah font emoji di AOSP, Anda tidak perlu mengambil tindakan. 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 Anda, letakkan font emoji tepat sebelum rantai fallback font:
- Tempatkan font Anda sendiri, yang disebut
OEMCustomEmoji.ttf
, di partisi/system
. Ubah
/system/etc/fonts.xml
seperti pada 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>
Modifikasi NotoColorEmoji.ttf untuk kebutuhan pasar lokal
Ikuti langkah-langkah berikut untuk menyesuaikan 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, mesin terbang yang dimodifikasi yang didukung oleh Modified\NotoColorEmoji.ttf
menunjukkan alih-alih NotoColorEmoji.ttf
asli. Google merekomendasikan hal berikut:
- Hanya memiliki mesin terbang yang diperlukan dalam font ini.
- Delegasikan mesin terbang yang tidak dimodifikasi ke file
NotoColorEmoji.ttf
asli sehingga perangkat Anda menerima perbaikan desain apa pun yang dibuat dalam rilis emoji mendatang.
Hapus mesin terbang: Untuk menghapus mesin terbang dari file NotoColorEmoji.ttf
, ikuti langkah 1 dan 2, dan tentukan glyph ID = 0
di cmap Anda.
Gunakan bendera regional: Jika mesin terbang target adalah bendera regional, tentukan ID mesin terbang sebagai kode negara yang tidak diketahui. (Gunakan country code = "ZZ"
.)
Membuat mesin terbang tahu: Anda dapat secara eksplisit menentukan ID mesin terbang tahu jika Anda ingin menggunakannya. Saat Anda menentukan glyphID = 0
, aplikasi terkait mengartikannya sebagai “glyph tidak tersedia”. Misalnya, saat Anda menggunakan atribut ini, aplikasi Paint#hasGlyph
mengembalikan false
.
Ganti atau ubah file font lainnya
Untuk mengganti atau memodifikasi font lain, kustomisasinya mirip dengan modifikasi file tff
untuk kebutuhan pasar lokal. File font tidak dikenal yang diperbarui di AOSP saat runtime diabaikan, dan tidak diperbarui. Google mengabaikan font yang tidak dikenal di perangkat Anda. Ini termasuk file font yang dimodifikasi dari font asli di AOSP.
Meskipun pembaruan font dilakukan oleh Google di GMS Core, mekanisme pembaruan font umum terbuka untuk semua OEM. OEM dapat menginstal pembaruan font tambahan menggunakan langkah-langkah dalam prasyarat Rapat , Menandatangani file font , dan Membuat pembaruan font waktu proses.
Prasyarat pertemuan
Mekanisme pembaruan font menggunakan fitur kernel Linux fs-verity
. Verifikasi bahwa perangkat Anda sesuai fs-verity
dan sertakan sertifikat di perangkat Anda.
Menandatangani file font
Karena file font adalah sumber daya yang berisiko, mereka 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 fs-verity
.
Membuat pembaruan font waktu proses
Aplikasi Sistem FontManger
melakukan pembaruan font. Aplikasi FontManager
menyediakan status font sistem terinstal terbaru dan kemampuan untuk memperbarui file font dengan tanda tangan. Untuk memanggil pembaruan aplikasi, tambahkan UPDATE_FONT signature|privileged
ke daftar aplikasi yang diizinkan , dan ke manifes Anda .
Berikan UPDATE_FONT signature|privileged
ke fungsi pembaru aplikasi Anda.