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) cihaza yüklenen font 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, kurulu yazı tipi dosyalarını yönetmek ve cihaza yüklenen yazı tipi dosyalarını bir sistem güncellemesi olmadan güncellemek için FontManager
sistem hizmetini kullanabilirsiniz.
Android 12, üç işlem etkileşimi içerir; FontManagerService
, Font Updater
ve Application
.
FontManagerService
, sistem sunucusundaki merkezi yönetim sistemidir. FontManagerService
kullanıcı başına en son sistem yazı tipi ayarlarını saklar.
FontUpdater
, bir signature|privileged
izin denetimi tarafından güvenilen, takılabilir bir yazı tipi güncelleyicidir. FontUpdater
mevcut sistem yazı tipi ayarlarını almak, yüklemek, kaldırmak veya güncellemek için FontManagerService
ile iletişim kurar. FontUpdater
yeni yazı tipi dosyası içeriklerini süreçler arası iletişim (IPC) mekanizmalarıyla iletebilir. FontManagerService
, içeriği /data/fonts
dosyaları gibi herkes tarafından okunabilen bir depolama konumuna kaydeder. Bu depo korumalıdır. Sadece FontManagerService
tarafından SELinux politikası ile 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; ardından uygulama işlemi tarafından kullanılmak üzere yazı tipi ayarlarını başlatır.
Yazı tiplerini özelleştir
Bazı OEM'ler, markalarını göstermek için AOSP'deki yazı tipi dosyalarını 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 de 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ştirmek için aşağıdaki üç yola dikkat edin:
-
NotoColorEmoji.ttf
dosyasını OEM markalı bir emoji yazı tipiyle değiştirin. -
NotoColorEmoji.ttf
dosyasını yerel pazar ihtiyaçlarınıza göre 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ıza gerek yoktur. Emoji yazı tiplerini özelleştirmek istiyorsanız, aşağıdaki bölümlerdeki talimatları kullanın.
NotoColorEmoji.ttf dosyasını OEM markalı emoji yazı tipleriyle değiştirin
NotoColorEmoji.ttf
dosyasını OEM markalı emoji yazı tipi dosyanızla değiştirmek için emoji yazı tipini, yazı tipi yedek zincirinin hemen önüne koyun:
-
OEMCustomEmoji.ttf
adlı kendi yazı tipinizi/system
bölümüne yerleştirin. /system/etc/fonts.xml
dosyasını 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>
Yerel pazar gereksinimleri için NotoColorEmoji.ttf dosyasını değiştirin
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 gliflere sahip olun.
- Değiştirilmemiş glifleri orijinal
NotoColorEmoji.ttf
dosyasına atayın, böylece cihazlarınız gelecekteki emoji sürümlerinde yapılan tüm tasarım düzeltmelerini alır.
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 bir bayrak kullanın: Hedef glif bölgesel bir bayraksa, glif kimliğini bilinmeyen bir ülke kodu olarak belirtin. ( country code = "ZZ"
.)
Bir tofu glifi yapın: Kullanmak istiyorsanız, bir tofu glifi kimliğini açıkça belirtebilirsiniz. glyphID = 0
olarak belirttiğinizde, ilgili uygulama bunu "glyph 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 gereksinimleri için TTF dosyalarını değiştirmeye benzer. Çalışma zamanında AOSP'de güncellenen bilinmeyen yazı tipi dosyaları yoksayılır ve güncellenmez. Google, cihazınızdaki bilinmeyen yazı tiplerini yok sayar. Bu, AOSP'deki orijinal yazı tiplerinden değiştirilmiş yazı tipi dosyalarını içerir.
GMS Core'da yazı tipi güncellemeleri Google tarafından yapılsa da, genel yazı tipi güncelleme mekanizması tüm OEM'lere açıktır. OEM'ler, Toplantı önkoşulları , Yazı tipi dosyalarını imzalama ve Çalışma zamanı yazı tipi güncellemeleri yapma bölümlerindeki adımları kullanarak ek yazı tipi güncelleyicileri yükleyebilir.
Ön koşulları karşılayın
Yazı tipi güncelleme mekanizması, fs-verity
Linux çekirdek ö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ı imzala
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 yapın
FontManger
System uygulaması, yazı tipi güncellemelerini gerçekleştirir. FontManager
uygulaması, en son yüklü sistem yazı tipi durumunu ve yazı tipi dosyalarını imzalarla güncelleme yeteneği sağlar. Güncelleme uygulamalarını çağırmak için UPDATE_FONT signature|privileged
iznini uygulama izin verilenler listenize ve manifest dosyanıza ekleyin.
Uygulamanızın güncelleyici işlevi için UPDATE_FONT signature|privileged
izni sağlayın.