Android 15'ten itibaren değişken yazı tipleri, çalışma zamanında daha iyi verimlilik ve ayrıntı düzeyiyle oluşturulur. Bu güncellemeyle birlikte, fonts.xml
kullanımdan kaldırıldığından satıcılar fonts.xml
yerine font_fallback.xml
'ye yeni değişken yazı tipi yapılandırmaları eklemelidir.
Daha fazla bilgi için Değişken yazı tipi desteği başlıklı makaleyi inceleyin.
Android 11 ve önceki sürümlerde, AOSP'de (/system/fonts
bölümünde) veya satıcı bölümlerinde (/product/fonts
ya da /system/fonts
bölümlerinde) cihaza yüklenen yazı tipi dosyalarının güncellenmesi için OEM'den sistem güncellemesi yapılması gerekir. Bu koşul, emoji uyumluluğunu önemli ölçüde etkiler. Android 12'de, yüklenen yazı tipi dosyalarını yönetmek ve cihaza yüklenen yazı tipi dosyalarını sistem güncellemesi olmadan güncellemek için FontManager
sistem hizmetini kullanabilirsiniz.
Android 12'de üç işlem etkileşimi bulunur: 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
, signature|privileged
izni kontrolüyle güvenilen, eklenebilir bir yazı tipi güncelleyicisidir. FontUpdater
, mevcut sistem yazı tipi 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ını kullanarak yeni yazı tipi dosyası içeriklerini iletebilir. FontManagerService
, içeriği /data/fonts
dosyaları gibi herkesin okuyabileceği bir depolama konumuna kaydeder. Bu
depolama alanı korunuyor. Bu politika, FontManagerService
tarafından veya SELinux politikası tarafından 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ılacak yazı tipi ayarlarını 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çimde 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, statik yazı tipinin tüm özelliklerine ek olarak supportedAxes
özelliğine 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 verilen ağırlık ve stil değeri için dinamik olarak bir yazı tipi örneği oluşturur.
Geliştiriciler, sisteme yüklenmiş 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
sayfalarına bakın.
Yazı tiplerini özelleştirme
Bazı OEM'ler, markalarını göstermek için AOSP'ye yazı tipi dosyaları yükler veya bu dosyalarda değişiklik yapar. Android 12 bu işlevi destekler ancak cihazlarda emoji yazı tiplerinin güncel tutulması için şartlar ekler. Emoji yazı tipi dosyalarını değiştirmeyen veya güncellemeyen OEM'lerin bu özelliği kullanması gerekmez.
Google, ö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 /frameworks/base/data/fonts/fonts.xml
bölümünden de kaldırmayın.
Yazı tiplerinizi özelleştirebileceğiniz üç yöntemi aşağıda bulabilirsiniz:
NotoColorEmoji.ttf
dosyasını OEM markalı bir emoji yazı tipiyle değiştirin.- Yerel pazar ihtiyaçlarınıza göre
NotoColorEmoji.ttf
dosyasını değiştirin. - Diğer yazı tipi dosyalarını değiştirme veya düzenleme
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 geri dönüşüm zincirinin hemen önüne yerleştirin:
OEMCustomEmoji.ttf
adlı kendi yazı tipinizi/system
bölümüne yerleştirin.Aşağıdaki kodda olduğu gibi
/frameworks/base/data/fonts/fonts.xml
(ve Android 15 ile sonraki sürümlerde/frameworks/base/data/fonts/font-fallback.xml
) öğesini 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 dosyasını yerel pazar ihtiyaçlarına göre değiştirme
Yerel pazarınızın ihtiyaçlarına 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ından önce 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 yapmanızı önerir:
- Bu yazı tipinde yalnızca gerekli glif bulunur.
- Değiştirilmemiş glifleri orijinal
NotoColorEmoji.ttf
dosyasına devrederek cihazlarınızın gelecekteki emoji sürümlerinde yapılan tasarım düzeltmelerini almasını sağlayın.
Glifleri kaldırma: Glifleri NotoColorEmoji.ttf
dosyasından kaldırmak için 1. ve 2. adımları uygulayın ve cmap'inizde glyph ID = 0
değerini belirtin.
Bölgesel bir işaret kullanın: Hedef glif bölgesel bir işaretse glif kimliğini bilinmeyen bir ülke kodu olarak belirtin. (country code = "ZZ"
kullanın.)
Tofu glifi oluşturma: Tofu glifi kullanmak istiyorsanız tofu glifi kimliğini açıkça belirtebilirsiniz. glyphID = 0
özelliğini 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 düzenleme
Diğer yazı tiplerini değiştirmek veya düzenlemek için özelleştirme işlemi, yerel pazar ihtiyaçlarına yönelik TTF dosyalarını düzenlemeye 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. AOSP'deki orijinal yazı tiplerinden değiştirilmiş 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 Çalışma zamanında yazı tipi güncellemeleri yapma bölümlerindeki adımları uygulayarak ek yazı tipi güncelleyiciler 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ı 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ı yazı tipi güncellemeleri yapma
FontManager
sistem uygulaması, yazı tipi güncellemelerini gerçekleştirir. FontManager
uygulaması, yüklü olan en son sistem yazı tipi durumunu ve yazı tipi dosyalarını imzalarla güncelleme özelliğini sağlar. Uygulamaları güncelleme işlevini çağırmak için UPDATE_FONT signature|privileged
iznini izin verilenler listenize ve manifestinize ekleyin.
Uygulamanızın güncelleme işlevine UPDATE_FONT signature|privileged
iznini verin.