Android 11 ve önceki sürümlerde, AOSP'de ( /system/fonts
bölümünde) veya satıcı bölümlerinde ( /product/fonts
veya /system/fonts
bölümlerinde) aygıta yüklenen yazı tipi dosyalarının güncellenmesi, OEM'den bir sistem güncellemesi gerektirir. Bu gereksinimin emoji uyumluluğu üzerinde önemli bir etkisi vardır. Android 12'de, yüklü yazı tipi dosyalarını yönetmek ve cihazda yüklü yazı tipi dosyalarını sistem güncellemesi olmadan güncellemek için FontManager
sistem hizmetini kullanabilirsiniz.
Android 12, üç işlem etkileşimine sahiptir; FontManagerService
, Font Updater
ve Application
.
FontManagerService
, sistem sunucusundaki merkezi yönetim sistemidir. FontManagerService
, kullanıcı başına en son sistem yazı tipi ayarlarını depolar.
FontUpdater
, signature|privileged
izin denetimi tarafından güvenilen, takılabilir bir yazı tipi güncelleyicidir. FontUpdater
, mevcut sistem font ayarlarını almak, yüklemek, kaldırmak veya güncellemek için FontManagerService
ile iletişim kurar. FontUpdater
, süreçler arası iletişim (IPC) mekanizmalarıyla yeni yazı tipi dosyası içeriklerini iletebilir. FontManagerService
, içeriği /data/fonts
dosyaları gibi dünya çapında okunabilir bir depolama konumuna kaydeder. Bu depo korunuyor. Yalnızca FontManagerService
tarafından SELinux ilkesiyle yazılabilir.
Application
sınıfı başlatıldığında, sistem yazı tipi ayarlarını bindApplication
yönteminin bağımsız değişkenleri olarak iletir; daha sonra uygulama işlemi tarafından kullanılmak üzere yazı tipi ayarlarını başlatır.
Özel yazı tiplerini uygulama
Bazı OEM'ler, markalarını göstermek için yazı tipi dosyalarını AOSP'ye yükler veya değiştirir. Android 12 bu işlevi destekler, ancak cihazlarda emoji yazı tiplerini güncel tutmak için gereksinimler ekler. Emoji yazı tipi dosyalarını değiştirmeyen veya güncellemeyen OEM'lerin bu özelliği kullanmasına gerek yoktur.
Google, yazı tipi dosyalarını, özellikle NotoColorEmoji
dosyalarını GMS Core aracılığıyla günceller, bu nedenle NotoColorEmoji.ttf
dosyasını /system
bölümünden değiştirmeyin veya kaldırmayın ve /system/etc/fonts.xml
dosyasından kaldırmayın. Yazı tiplerinizi özelleştirebileceğiniz aşağıdaki üç yolu not edin:
-
NotoColorEmoji.ttf
dosyasını OEM markalı bir emoji yazı tipiyle değiştirin. -
NotoColorEmoji.ttf
dosyasını yerel pazar ihtiyaçlarınız için değiştirin. - Diğer yazı tipi dosyalarını değiştirin veya değiştirin.
AOSP'de emoji yazı tiplerini değiştirmiyorsanız, işlem yapmanız gerekmez. Emoji yazı tiplerini özelleştirmek istiyorsanız aşağıdaki bölümlerdeki talimatları kullanın.
NotoColorEmoji.ttf'nin OEM markalı emoji yazı tipleriyle değiştirilmesi
NotoColorEmoji.ttf
dosyasını OEM markalı emoji yazı tipi dosyanızla değiştirmek için emoji yazı tipini yazı tipi geri dönüş zincirinin hemen önüne koyun:
-
OEMCustomEmoji.ttf
adlı kendi yazı tipinizi/system
bölümüne yerleştirin. /system/etc/fonts.xml
aşağıdaki koddaki gibi değiştirin:<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>
NotoColorEmoji.ttf'yi yerel pazar ihtiyaçları için değiştirme
Yerel pazar ihtiyaçlarınıza göre özelleştirmek için şu adımları izleyin:
- Farklı bir adla kendi
NotoColorEmoji
dosyanızı oluşturun; örneğin,Modified\_NotoColorEmoji.ttf
olarak adlandırın. - Orijinal
NotoColorEmoji.ttf
dosyasının önüne yerleştirin.
2. adımı gerçekleştirdikten sonra, orijinal NotoColorEmoji.ttf
yerine Modified\NotoColorEmoji.ttf
tarafından desteklenen değiştirilmiş glif gösterilir. Google aşağıdakileri önerir:
- Bu yazı tipinde yalnızca gerekli glifi kullanın.
- Cihazlarınızın gelecekteki emoji sürümlerinde yapılan tasarım düzeltmelerini alması için değiştirilmemiş glifleri orijinal
NotoColorEmoji.ttf
dosyasına atayın.
Glifleri kaldırın: NotoColorEmoji.ttf
dosyasından glifleri kaldırmak için 1. ve 2. adımları izleyin ve cmap'inizde glyph ID = 0
belirtin.
Bölgesel bayrak kullanın: Hedef glif bölgesel bir bayraksa glif kimliğini bilinmeyen bir ülke kodu olarak belirtin. ( country code = "ZZ"
kullanın.)
Tofu glifi yap: Kullanmak istiyorsanız, açıkça bir tofu glifi kimliği belirtebilirsiniz. glyphID = 0
belirttiğinizde, ilgili uygulama bunu “glif mevcut değil” olarak yorumlar. Örneğin, bu özniteliği kullandığınızda Paint#hasGlyph
uygulaması false
döndürür.
Diğer yazı tipi dosyalarını değiştirin veya değiştirin
Diğer yazı tiplerini değiştirmek veya değiştirmek için özelleştirme, yerel pazar ihtiyaçları için tff
dosyalarını değiştirmeye benzer. Çalışma zamanında AOSP'de güncellenen bilinmeyen yazı tipi dosyaları yok sayılır ve güncellenmez. Google, cihazınızdaki bilinmeyen yazı tiplerini yok sayar. Bu, AOSP'deki orijinal yazı tiplerinden değiştirilen yazı tipi dosyalarını içerir.
GMS Core'da font güncellemeleri Google tarafından yapılsa da genel font güncelleme mekanizması tüm OEM'lere açıktır. OEM'ler, Önkoşulların karşılanması, Yazı tipi dosyalarının imzalanması ve Çalışma zamanı yazı tipi güncellemelerinin yapılması bölümlerindeki adımları kullanarak ek yazı tipi güncelleyicileri yükleyebilir.
Toplantı önkoşulları
Yazı tipi güncelleme mekanizması, fs-verity
Linux çekirdeği özelliğini kullanır. Cihazınızın fs-verity
uyumlu olduğunu doğrulayın ve sertifikayı cihazınıza ekleyin.
Yazı tipi dosyalarını imzalama
Yazı tipi dosyaları riskli kaynaklar olduğundan güvenilir anahtarlarla doğrulanmaları gerekir. Güncellenecek tüm yazı tipi dosyalarını dikkatlice inceleyin ve özel anahtarınızla imzalayın. İmza fs-verity
uyumlu olmalıdır.
Çalışma zamanı yazı tipi güncellemeleri yapma
FontManger
System uygulaması, font güncellemelerini gerçekleştirir. FontManager
uygulaması, en son yüklenen sistem yazı tipi durumunu ve yazı tipi dosyalarını imzalarla güncelleme olanağı sağlar. Güncelleme uygulamalarını çağırmak için, uygulama izin verilenler listenize ve bildiriminize UPDATE_FONT signature|privileged
izni ekleyin.
UPDATE_FONT signature|privileged
izin verin.