Özel yazı tipleri uygulama

Android 15'ten itibaren değişken yazı tipleri, daha verimli ve ayrıntılı bir şekilde çalışma zamanında oluşturulur. fonts.xml desteği sonlandırıldığından, bu güncellemeyle birlikte tedarikçi firmaların fonts.xml yerine font_fallback.xml için yeni değişken yazı tipi yapılandırmaları eklemesi gerekiyor. Daha fazla bilgi için Değişken yazı tipleri için destek başlıklı makaleye bakın.

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 gereksinimin emoji uyumluluğu üzerinde önemli bir etkisi vardır. Android 12'de, sistem güncellemesi olmadan yüklü yazı tipi dosyalarını yönetmek ve cihaza yüklenen yazı tipi dosyalarını güncellemek için FontManager sistem hizmetini kullanabilirsiniz.

Android 12'de üç süreç etkileşimi bulunur: FontManagerService, Font Updater ve Application.

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ünde 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 geçirebilir. FontManagerService, içerikleri /data/fonts dosyaları gibi herkesin okuyabileceği bir depolama konumuna 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 desteği

Android 15'ten itibaren, değişken yazı tipi yapılandırmaları font_fallback.xml içinde aşağıdaki biçim kullanılarak belirtilmektedir:

<family lang="und-Ethi" supportedAxes="wght,ital">
    <font>NotoSansEthiopic-VF.ttf</font>
</family>

Bu biçimde, bir değişken yazı tipi, ek bir supportedAxes özelliğiyle birlikte statik bir 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 belirtilen ağırlık ve stil değeri için dinamik olarak bir yazı tipi örneği oluşturur.

Geliştiriciler, sistem tarafından 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 göz atın.

Yazı tiplerini özelleştirme

Bazı OEM'ler, markalarını göstermek için AOSP'ye yazı tipi dosyalarını 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, yazı tipi dosyalarını, özellikle de NotoColorEmoji dosyalarını GMS Core üzerinden güncellediğinden NotoColorEmoji.ttf dosyasını /system bölümünde değiştirmeyin veya kaldırmayın ve /frameworks/base/data/fonts/fonts.xml bölümünden de kaldırmayın. Yazı tiplerini özelleştirebileceğiniz üç yöntemi göz önünde bulundurun:

  1. NotoColorEmoji.ttf dosyasını, OEM markalı bir emoji yazı tipiyle değiştirin.
  2. NotoColorEmoji.ttf dosyasını yerel pazar ihtiyaçlarınıza göre değiştirin.
  3. Diğer yazı tipi dosyalarını değiştirin veya düzenleyin.

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ümlerde yer alan 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:

  1. /system bölümüne OEMCustomEmoji.ttf adlı kendi yazı tipinizi yerleştirin.
  2. /frameworks/base/data/fonts/fonts.xml (ve Android 15 ve sonraki sürümlerde /frameworks/base/data/fonts/font-fallback.xml) öğesini aşağıdaki kod 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ı izleyin:

  1. Farklı bir ada sahip kendi NotoColorEmoji dosyanızı oluşturun (örneğin, dosyayı Modified\_NotoColorEmoji.ttf olarak adlandırın).
  2. Dosyayı, orijinal NotoColorEmoji.ttf dosyasının öncesine 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 karakterler 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.

Glifleri kaldırın: NotoColorEmoji.ttf dosyasından glifleri kaldırmak için 1 ve 2. adımları uygulayın ve charitanızda glyph ID = 0 değerini belirtin.

Bölge bayrağı kullan: Hedef glif bölgesel bir bayraksa glif kimliğini bilinmeyen ülke kodu olarak belirtin. (country code = "ZZ" kullanın.)

Tofu glifi yapma: Kullanmak isterseniz açıkça bir tofu glif kimliği 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 düzenleme

Diğer yazı tiplerini değiştirmek veya değiştirmek için yapılan özelleştirme, TTF dosyalarını yerel pazar ihtiyaçları için 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 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.

Ö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 ile uyumlu olduğunu doğrulayın ve sertifikayı cihazınıza ekleyin.

Yazı tipi dosyalarını imzalayın

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. İmzafs-verity uyumlu olmalıdır.

Çalışma zamanı yazı tipi güncellemeleri yapın

Yazı tipi güncellemeleri, FontManager sistem uygulaması tarafından yapılır. FontManager uygulaması, yüklü en son sistem yazı tipi durumunu ve yazı tipi dosyalarını imzalarla güncelleme olanağı sunar. Güncelleme uygulamalarını çağırmak için uygulama izin verilenler listenize ve manifest dosyanıza UPDATE_FONT signature|privileged iznini ekleyin.

Uygulamanızın güncelleyici işlevine UPDATE_FONT signature|privileged iznini verin.