Android 15'ten itibaren değişken yazı tipleri, daha verimli ve ayrıntılı bir şekilde çalışma zamanında oluşturulur. Bu güncellemeyle birlikte, fonts.xml
desteği sonlandırıldığı için tedarikçi firmaların fonts.xml
yerine font_fallback.xml
için yeni değişken yazı tipi yapılandırmaları eklemesi gerekir.
Daha fazla bilgi için Değişken yazı tipleri için destek başlıklı makaleyi inceleyin.
Android 11 ve önceki sürümlerde, cihaza yüklenen yazı tipi dosyalarını AOSP'de (/system/fonts
bölümünde) veya tedarikçi firma bölümlerinde (/product/fonts
veya /system/fonts
bölümlerinde) güncellemek için OEM'den bir sistem güncellemesi gerekir. Bu şart, emoji uyumluluğunu önemli ölçüde etkiler. Android 12'de, yüklü yazı tipi dosyalarını yönetmek ve sistem güncellemesi yapmadan cihaza yüklü yazı tipi dosyalarını güncellemek için FontManager
sistem hizmetini kullanabilirsiniz.
Android 12'de FontManagerService
, Font Updater
ve Application
olmak üzere üç işlem etkileşimi bulunur.
FontManagerService
, sistem sunucusunda merkezi yönetim sistemidir.
FontManagerService
, kullanıcı başına en son sistem yazı tipi ayarlarını depolar.
FontUpdater
, signature|privileged
izin kontrolü 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 işlemler arası iletişim (IPC) mekanizmalarıyla iletebilir. FontManagerService
, içerikleri herkes tarafından okunabilen bir depolama konumuna (ör. /data/fonts
dosyaları) kaydeder. Bu depolama alanı korunur. SELinux politikası uyarınca FontManagerService
tarafından yalnızca 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 ve ardından yazı tipi ayarlarını uygulama işlemi tarafından kullanılmak üzere başlatır.
Değişken yazı tipleri için destek
Android 15'ten itibaren değişken yazı tipi yapılandırmaları, aşağıdaki biçim kullanılarak font_fallback.xml
içinde belirtilir:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
Bu biçimde, değişken yazı tipi, ek bir supportedAxes
özelliğiyle statik yazı tipinin tüm özelliklerine sahiptir. supportedAxes
özelliği, desteklenen eksen etiketlerinin virgülle ayrılmış bir listesidir. Android 15'te yalnızca wght
ve ital
eksenleri belirtilebilir.
supportedAxes
özelliği belirtilmemişse font
düğümü, axis
alt öğeleriyle belirtilen değişken yazı tipinin tek bir örneğinin statik yazı tipi olarak çalışır.
supportedAxes
özelliği belirtilirse sistem, çalışma zamanında belirli ağırlık ve stil değeri için dinamik olarak bir yazı tipi örneği oluşturur.
Geliştiriciler, sisteme yüklenen yazı tipi dosyalarının listesini almak için android.graphics.fonts.SystemFonts#getAvailableFonts
Java API'yi veya ASystemFontIterator_open
NDK API'yi kullanabilir. Bu güncellemeyi destekleyen geliştirici API'leri hakkında bilgi edinmek için Geliştirilmiş OpenType Değişken Yazı Tipi API'si ve buildVariableFamily
başlıklı makaleleri inceleyin.
Yazı tiplerini özelleştirme
Bazı OEM'ler markalarını göstermek için AOSP'de yazı tipi dosyaları yükler veya değiştirir. Android 12 bu işlevi destekler ancak cihazlarda emoji yazı tiplerinin güncel kalmasını sağlamak için şartlar ekler. Emoji yazı tipi dosyalarını değiştirmeyen veya güncellemeyen OEM'lerin bu özelliği kullanması gerekmez.
Google, GMS Core aracılığıyla yazı tipi dosyalarını (özellikle NotoColorEmoji
dosyalarını) günceller. Bu nedenle, NotoColorEmoji.ttf
dosyasını /system
bölümünden veya /frameworks/base/data/fonts/fonts.xml
'dan değiştirmeyin ya da kaldırmayın.
Yazı tiplerinizi özelleştirmenin üç yolunu aşağıda bulabilirsiniz:
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ştirme veya değiştirme
AOSP'de emoji yazı tiplerini değiştirmiyorsanız herhangi bir işlem yapmanız gerekmez. Emoji yazı tiplerini özelleştirmek istiyorsanız aşağıdaki bölümlerdeki talimatları uygulayın.
NotoColorEmoji.ttf dosyasını OEM markalı emoji yazı tipleriyle değiştirme
NotoColorEmoji.ttf
dosyasını OEM markalı emoji yazı tipi dosyanızla değiştirmek için emoji yazı tipini yazı tipi yedek zincirinden hemen önce koyun:
OEMCustomEmoji.ttf
adlı kendi yazı tipinizi/system
bölümüne yerleştirin./frameworks/base/data/fonts/fonts.xml
(ve Android 15 ve sonraki sürümlerde/frameworks/base/data/fonts/font-fallback.xml
) parametresini aşağıdaki kodda gösterildiği 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 ihtiyaçları için NotoColorEmoji.ttf dosyasını değiştirme
Yerel pazar ihtiyaçlarınıza göre özelleştirmek için aşağıdaki adımları uygulayın:
- Farklı bir ada sahip kendi
NotoColorEmoji
dosyanızı oluşturun (örneğin, dosyayıModified\_NotoColorEmoji.ttf
olarak adlandırın). - Orijinal
NotoColorEmoji.ttf
dosyasının önüne yerleştirin.
2. adımı uyguladıktan 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 glifler bulunmalıdır.
- Değiştirilmemiş karakterleri orijinal
NotoColorEmoji.ttf
dosyasına atayın. Böylece cihazlarınız, gelecekteki emoji sürümlerinde yapılan tasarım düzeltmelerini alır.
Glifler kaldırma: NotoColorEmoji.ttf
dosyasından glifleri kaldırmak için 1. ve 2. adımları uygulayın ve cmap'inizde glyph ID = 0
'ı belirtin.
Bölgesel bayrak kullanın: Hedef simge bölgesel bir bayrak ise simge kimliğini bilinmeyen ülke kodu olarak belirtin. (country code = "ZZ"
kullanın.)
Tofu glifi oluşturma: Kullanmak istiyorsanız tofu glifi kimliğini açıkça belirtebilirsiniz. glyphID = 0
değerini belirttiğinizde ilgili uygulama bunu "glif kullanılamıyor" olarak yorumlar. Örneğin, bu özelliği kullandığınızda Paint#hasGlyph
uygulaması false
değerini döndürür.
Diğer yazı tipi dosyalarını değiştirme veya değiştirme
Diğer yazı tiplerini değiştirmek veya değiştirmek için yerel pazar ihtiyaçlarına göre TTF dosyalarını değiştirmek için kullanılan özelleştirmeye benzer bir özelleştirme yapmanız gerekir. AOSP'de çalışma zamanında güncellenen bilinmeyen yazı tipi dosyaları yoksayılır ve güncellenmez. Google, cihazınızdaki bilinmeyen yazı tiplerini yoksayar. AOSP'teki orijinal yazı tiplerinden değiştirilen yazı tipi dosyaları da buna dahildir.
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, Ön koşulları karşılama, Yazı tipi dosyalarını imzalama ve Yazı tipi güncellemelerini çalışma zamanında yapma bölümündeki adımları uygulayarak ek yazı tipi güncelleyicileri yükleyebilir.
Önkoşulları karşılama
Yazı tipi güncelleme mekanizması, fs-verity
Linux çekirdek özelliğini kullanır. Cihazınızın fs-verity
ile 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ğrulanmalıdır.
Güncellenecek tüm yazı tipi dosyalarını dikkatlice inceleyin ve özel anahtarınızla imzalayın. İmza,fs-verity
ile uyumlu olmalıdır.
Çalışma zamanında yazı tipi güncellemeleri yapma
FontManager
sistem uygulaması, yazı tipi güncellemelerini gerçekleştirir. FontManager
uygulaması, yüklü en son sistem yazı tipi durumunu ve yazı tipi dosyalarını imzalarla güncelleme olanağı sunar. Uygulama güncellemelerini çağırmak için UPDATE_FONT signature|privileged
iznini uygulama izin verilenler listenize ve manifest dosyanıza ekleyin.
Uygulamanızın güncelleyici işlevine UPDATE_FONT signature|privileged
iznini verin.