Terapkan font khusus

Di Android 11 dan yang lebih rendah, memperbarui file font yang diinstal perangkat di AOSP (di partisi /system/fonts ) atau partisi vendor (di partisi /product/fonts atau /system/fonts ) memerlukan pembaruan sistem dari OEM. Persyaratan ini berdampak 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 menghadirkan 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 dicolokkan dan 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 saja , dengan kebijakan SELinux.

Ketika kelas Application diluncurkan, ia meneruskan pengaturan font sistem sebagai argumen metode bindApplication ; kemudian menginisialisasi pengaturan font untuk digunakan oleh proses aplikasi.

Sesuaikan font

Beberapa OEM memasang 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 memperbarui file font, terutama file NotoColorEmoji melalui GMS Core, jadi jangan mengubah atau menghapus file NotoColorEmoji.ttf dari partisi /system , dan jangan menghapusnya dari /system/etc/fonts.xml . Perhatikan tiga cara berikut untuk menyesuaikan font Anda:

  1. Ganti file NotoColorEmoji.ttf dengan font emoji bermerek OEM.
  2. Ubah file NotoColorEmoji.ttf untuk kebutuhan pasar lokal Anda.
  3. Ganti atau modifikasi 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.

Ganti 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 penggantian font:

  1. Tempatkan font Anda sendiri, bernama OEMCustomEmoji.ttf , di partisi /system .
  2. 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>
    

Ubah NotoColorEmoji.ttf untuk kebutuhan pasar lokal

Ikuti langkah-langkah berikut untuk menyesuaikan kebutuhan pasar lokal Anda:

  1. Buat file NotoColorEmoji Anda sendiri dengan nama berbeda; misalnya, beri nama Modified\_NotoColorEmoji.ttf .
  2. Tempatkan sebelum file NotoColorEmoji.ttf asli.

Setelah Anda melakukan langkah 2, mesin terbang yang dimodifikasi yang didukung oleh Modified\NotoColorEmoji.ttf ditampilkan, bukan 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 pada rilis emoji mendatang.

Menghapus 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 ingin menggunakannya. Saat Anda menentukan glyphID = 0 , aplikasi terkait menafsirkannya sebagai “mesin terbang tidak tersedia”. Misalnya, saat Anda menggunakan atribut ini, aplikasi Paint#hasGlyph mengembalikan false .

Ganti atau modifikasi file font lainnya

Untuk mengganti atau memodifikasi font lain, kustomisasinya mirip dengan memodifikasi file TTF untuk kebutuhan pasar lokal. File font tidak dikenal yang diperbarui di AOSP saat runtime akan 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 secara umum terbuka untuk semua OEM. OEM dapat menginstal pembaru font tambahan menggunakan langkah-langkah dalam Memenuhi prasyarat , Menandatangani file font , dan Membuat pembaruan font runtime .

Memenuhi prasyarat

Mekanisme pembaruan font menggunakan fitur kernel Linux fs-verity . Verifikasi bahwa perangkat Anda mematuhi fs-verity dan sertakan sertifikat di perangkat Anda.

Tanda tangani file font

Karena file font adalah sumber daya yang berisiko, file font 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 dengan fs-verity .

Lakukan pembaruan font runtime

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 aplikasi pembaruan, tambahkan UPDATE_FONT signature|privileged ke daftar izin aplikasi Anda, dan ke manifes Anda .

Berikan UPDATE_FONT signature|privileged ke fungsi pembaru aplikasi Anda.