Android 15 से, वैरिएबल फ़ॉन्ट को बेहतर परफ़ॉर्मेंस और ज़्यादा जानकारी के साथ, रनटाइम पर रेंडर किया जाता है. इस अपडेट के बाद, वेंडर को fonts.xml
के बजाय font_fallback.xml
में नए वैरिएबल फ़ॉन्ट कॉन्फ़िगरेशन जोड़ने होंगे, क्योंकि fonts.xml
का इस्तेमाल बंद किया जा रहा है.
ज़्यादा जानकारी के लिए, वैरिएबल फ़ॉन्ट के लिए सहायता देखें.
Android 11 और उससे पहले के वर्शन में, डिवाइस में पहले से इंस्टॉल की गई फ़ॉन्ट फ़ाइलों को AOSP (/system/fonts
पार्टीशन में) या वेंडर पार्टीशन (/product/fonts
या /system/fonts
पार्टीशन में) में अपडेट करने के लिए, ओईएम से सिस्टम अपडेट की ज़रूरत होती है. इस ज़रूरी शर्त का असर, इमोजी के साथ काम करने की सुविधा पर पड़ता है. Android 12 में, FontManager
सिस्टम सेवा का इस्तेमाल करके, इंस्टॉल की गई फ़ॉन्ट फ़ाइलों को मैनेज किया जा सकता है. साथ ही, सिस्टम अपडेट किए बिना डिवाइस में इंस्टॉल की गई फ़ॉन्ट फ़ाइलों को अपडेट किया जा सकता है.
Android 12 में तीन प्रोसेस इंटरैक्शन हैं:
FontManagerService
, Font Updater
, और Application
.
FontManagerService
, सिस्टम सर्वर में मुख्य मैनेजमेंट सिस्टम है.
FontManagerService
, हर उपयोगकर्ता के लिए सिस्टम फ़ॉन्ट की नई सेटिंग सेव करता है.
FontUpdater
, प्लग इन किया जा सकने वाला फ़ॉन्ट अपडेटर है. इस पर signature|privileged
की अनुमति की जांच का भरोसा है. FontUpdater
, सिस्टम के मौजूदा फ़ॉन्ट की सेटिंग पाने, इंस्टॉल करने, हटाने या अपडेट करने के लिए, FontManagerService
के साथ संपर्क करता है. FontUpdater
, इंटर-प्रोसेस कम्यूनिकेशन (आईपीसी) प्रोसेस की मदद से, फ़ॉन्ट फ़ाइल का नया कॉन्टेंट पास कर सकता है. FontManagerService
, कॉन्टेंट को ऐसी स्टोरेज जगह पर सेव करता है जहां सभी लोग उसे पढ़ सकते हैं. जैसे, /data/fonts
फ़ाइलों में. इस स्टोरेज को सुरक्षित रखा जाता है. इसे सिर्फ़ FontManagerService
, SELinux नीति के तहत लिख सकता है.
Application
क्लास लॉन्च होने पर, यह सिस्टम फ़ॉन्ट सेटिंग को bindApplication
तरीके के आर्ग्युमेंट के तौर पर पास करती है. इसके बाद, यह ऐप्लिकेशन प्रोसेस के इस्तेमाल के लिए फ़ॉन्ट सेटिंग को शुरू करती है.
वैरिएबल फ़ॉन्ट के लिए सहायता
Android 15 से, वैरिएबल फ़ॉन्ट कॉन्फ़िगरेशन के लिए, font_fallback.xml
फ़ॉर्मैट का इस्तेमाल किया जाता है.
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
इस फ़ॉर्मैट में, वैरिएबल फ़ॉन्ट में स्टैटिक फ़ॉन्ट के सभी एट्रिब्यूट होते हैं. साथ ही, इसमें एक अतिरिक्त supportedAxes
एट्रिब्यूट भी होता है. supportedAxes
एट्रिब्यूट, काम करने वाले ऐक्सिस टैग की सूची होती है. इसमें टैग को कॉमा लगाकर अलग किया जाता है. Android 15 में, सिर्फ़ wght
और ital
ऐक्सिस तय किए जा सकते हैं.
अगर supportedAxes
एट्रिब्यूट की वैल्यू नहीं दी गई है, तो font
नोड, axis
चाइल्ड एलिमेंट के साथ तय किए गए वैरिएबल फ़ॉन्ट के एक इंस्टेंस के स्टैटिक फ़ॉन्ट के तौर पर काम करता है.
अगर supportedAxes
एट्रिब्यूट की वैल्यू दी गई है, तो सिस्टम रनटाइम के दौरान, दी गई वेट और स्टाइल वैल्यू के लिए डाइनैमिक तौर पर फ़ॉन्ट इंस्टेंस बनाता है.
डेवलपर, सिस्टम में इंस्टॉल की गई फ़ॉन्ट फ़ाइलों की सूची पाने के लिए, android.graphics.fonts.SystemFonts#getAvailableFonts
Java API या ASystemFontIterator_open
NDK API का इस्तेमाल कर सकते हैं. इस अपडेट के साथ काम करने वाले डेवलपर एपीआई के बारे में जानकारी पाने के लिए, बेहतर OpenType वैरिएबल फ़ॉन्ट एपीआई और buildVariableFamily
देखें.
फ़ॉन्ट को पसंद के मुताबिक बनाना
कुछ OEM, अपने ब्रैंड दिखाने के लिए AOSP में फ़ॉन्ट फ़ाइलें इंस्टॉल या बदलते हैं. Android 12 में यह सुविधा काम करती है. हालांकि, डिवाइसों में इमोजी फ़ॉन्ट को अप-टू-डेट रखने के लिए, कुछ ज़रूरी शर्तें जोड़ी गई हैं. जिन OEM ने इमोजी फ़ॉन्ट फ़ाइलों में बदलाव नहीं किया है या उन्हें अपडेट नहीं किया है उन्हें इस सुविधा का इस्तेमाल करने की ज़रूरत नहीं है.
Google, फ़ॉन्ट फ़ाइलों को अपडेट करता है. खास तौर पर, GMS Core की मदद से NotoColorEmoji
फ़ाइलों को अपडेट करता है. इसलिए, /system
पार्टीशन से NotoColorEmoji.ttf
फ़ाइल में बदलाव न करें या उसे न हटाएं. साथ ही, उसे /frameworks/base/data/fonts/fonts.xml
से भी न हटाएं.
फ़ॉन्ट को पसंद के मुताबिक बनाने के लिए, यहां दिए गए तीन तरीके अपनाएं:
NotoColorEmoji.ttf
फ़ाइल को OEM ब्रैंड वाले इमोजी फ़ॉन्ट से बदलें.- अपने स्थानीय बाज़ार की ज़रूरतों के हिसाब से,
NotoColorEmoji.ttf
फ़ाइल में बदलाव करें. - अन्य फ़ॉन्ट फ़ाइलों को बदलना या उनमें बदलाव करना.
अगर आपको AOSP में इमोजी फ़ॉन्ट में बदलाव नहीं करना है, तो आपको कोई कार्रवाई करने की ज़रूरत नहीं है. अगर आपको इमोजी फ़ॉन्ट को पसंद के मुताबिक बनाना है, तो नीचे दिए गए सेक्शन में दिए गए निर्देशों का पालन करें.
NotoColorEmoji.ttf को OEM ब्रैंड वाले इमोजी फ़ॉन्ट से बदलना
NotoColorEmoji.ttf
फ़ाइल को OEM ब्रैंड वाले इमोजी फ़ॉन्ट की फ़ाइल से बदलने के लिए, इमोजी फ़ॉन्ट को फ़ॉन्ट फ़ॉलबैक चेन से ठीक पहले डालें:
/system
पार्टीशन में,OEMCustomEmoji.ttf
नाम का अपना फ़ॉन्ट डालें./frameworks/base/data/fonts/fonts.xml
(और Android 15 और उसके बाद के वर्शन में/frameworks/base/data/fonts/font-fallback.xml
) में नीचे दिए गए कोड के मुताबिक बदलाव करें:<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 में बदलाव करना
अपने स्थानीय बाज़ार की ज़रूरतों के हिसाब से डेक को कस्टमाइज़ करने के लिए, यह तरीका अपनाएं:
- अपनी
NotoColorEmoji
फ़ाइल को किसी दूसरे नाम से बनाएं. उदाहरण के लिए, इसेModified\_NotoColorEmoji.ttf
नाम दें. - इसे ओरिजनल
NotoColorEmoji.ttf
फ़ाइल से पहले रखें.
दूसरा चरण पूरा करने के बाद, ओरिजनल NotoColorEmoji.ttf
के बजाय, Modified\NotoColorEmoji.ttf
के साथ काम करने वाला बदला हुआ ग्लिफ़ दिखता है.
Google इनका सुझाव देता है:
- इस फ़ॉन्ट में सिर्फ़ ज़रूरी ग्लिफ़ हों.
- बिना बदलाव वाले ग्लिफ़ को मूल
NotoColorEmoji.ttf
फ़ाइल में भेजें, ताकि आपके डिवाइसों पर आने वाले समय में इमोजी के रिलीज़ में किए गए डिज़ाइन से जुड़े सुधार लागू हो सकें.
ग्लिफ़ हटाना: NotoColorEmoji.ttf
फ़ाइल से ग्लिफ़ हटाने के लिए, पहला और दूसरा चरण पूरा करें. साथ ही, अपने cmap में glyph ID = 0
की जानकारी दें.
रीजनल फ़्लैग का इस्तेमाल करना: अगर टारगेट ग्लिफ़ कोई रीजनल फ़्लैग है, तो ग्लिफ़ आईडी को किसी ऐसे देश के कोड के तौर पर बताएं जिसकी जानकारी नहीं है. (country code = "ZZ"
का इस्तेमाल करें.)
टोफ़ू ग्लिफ़ बनाना: अगर आपको टोफ़ू ग्लिफ़ का इस्तेमाल करना है, तो साफ़ तौर पर टोफ़ू ग्लिफ़ आईडी डालें. glyphID = 0
एट्रिब्यूट की वैल्यू सबमिट करने पर, उससे जुड़ा ऐप्लिकेशन इसे “ग्लिफ़ उपलब्ध नहीं है” के तौर पर समझता है. उदाहरण के लिए, इस एट्रिब्यूट का इस्तेमाल करने पर, Paint#hasGlyph
ऐप्लिकेशन false
दिखाता है.
अन्य फ़ॉन्ट फ़ाइलों को बदलना या उनमें बदलाव करना
अन्य फ़ॉन्ट बदलने या उनमें बदलाव करने के लिए, स्थानीय बाज़ार की ज़रूरतों के हिसाब से TTF फ़ाइलों में बदलाव करने की तरह ही कस्टमाइज़ेशन किया जाता है. रनटाइम के दौरान AOSP में अपडेट की गई ऐसी फ़ॉन्ट फ़ाइलों को नज़रअंदाज़ कर दिया जाता है और उन्हें अपडेट नहीं किया जाता. Google, आपके डिवाइस में मौजूद ऐसे फ़ॉन्ट को अनदेखा कर देता है जिनके बारे में उसे जानकारी नहीं है. इसमें फ़ॉन्ट फ़ाइलें शामिल हैं, जिन्हें AOSP के ओरिजनल फ़ॉन्ट में बदलाव करके बनाया गया है.
फ़ॉन्ट के अपडेट, Google GMS Core में किए जाते हैं. हालांकि, फ़ॉन्ट अपडेट करने का सामान्य तरीका सभी OEM के लिए उपलब्ध है. OEM, ज़रूरी शर्तें पूरी करना, फ़ॉन्ट फ़ाइलों पर हस्ताक्षर करना, और रनटाइम फ़ॉन्ट अपडेट करना में बताए गए तरीके का इस्तेमाल करके, फ़ॉन्ट अपडेट करने वाले अन्य टूल इंस्टॉल कर सकते हैं.
ज़रूरी शर्तें पूरी करना
फ़ॉन्ट अपडेट करने की सुविधा, fs-verity
Linux kernel की सुविधा का इस्तेमाल करती है. पुष्टि करें कि आपका डिवाइस fs-verity
के मुताबिक है और उसमें सर्टिफ़िकेट शामिल है.
फ़ॉन्ट फ़ाइलों पर हस्ताक्षर करना
फ़ॉन्ट फ़ाइलें जोखिम भरे संसाधन हैं. इसलिए, उनकी पुष्टि भरोसेमंद कुंजियों से की जानी चाहिए.
अपडेट की जानी वाली सभी फ़ॉन्ट फ़ाइलों की ध्यान से समीक्षा करें और अपनी निजी कुंजी से हस्ताक्षर करें. हस्ताक्षर,fs-verity
के साथ काम करना चाहिए.
रनटाइम फ़ॉन्ट अपडेट करना
FontManager
सिस्टम ऐप्लिकेशन, फ़ॉन्ट अपडेट करता है. FontManager
ऐप्लिकेशन, इंस्टॉल किए गए नए सिस्टम फ़ॉन्ट की स्थिति दिखाता है. साथ ही, हस्ताक्षर के साथ फ़ॉन्ट फ़ाइलों को अपडेट करने की सुविधा भी देता है. अपडेट किए गए ऐप्लिकेशन को कॉल करने के लिए, ऐप्लिकेशन की अनुमति वाली सूची और अपने मेनिफ़ेस्ट में, UPDATE_FONT signature|privileged
अनुमति जोड़ें.
अपने ऐप्लिकेशन के अपडेटर फ़ंक्शन को UPDATE_FONT signature|privileged
अनुमति दें.