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
देखें.
फ़ॉन्ट को पसंद के मुताबिक बनाना
कुछ ओईएम, अपने ब्रैंड दिखाने के लिए AOSP में फ़ॉन्ट फ़ाइलें इंस्टॉल करते हैं या उन्हें बदलते हैं. Android 12 में यह सुविधा काम करती है. हालांकि, इसमें डिवाइसों में इमोजी फ़ॉन्ट को अपडेट रखने के लिए कुछ ज़रूरी शर्तें जोड़ी गई हैं. जिन ओईएम ने इमोजी फ़ॉन्ट फ़ाइलों में बदलाव नहीं किया है या उन्हें अपडेट नहीं किया है उन्हें इस सुविधा का इस्तेमाल करने की ज़रूरत नहीं है.
Google, फ़ॉन्ट फ़ाइलों को अपडेट करता है. खास तौर पर, GMS Core के ज़रिए NotoColorEmoji
फ़ाइलों को अपडेट किया जाता है. इसलिए, /system
पार्टीशन से NotoColorEmoji
फ़ाइल में बदलाव न करें या उसे न हटाएं. साथ ही, उसे /frameworks/base/data/fonts/fonts.xml
से भी न हटाएं.NotoColorEmoji.ttf
यहां दिए गए तीन तरीकों से, फ़ॉन्ट को पसंद के मुताबिक बनाया जा सकता है:
NotoColorEmoji.ttf
फ़ाइल को ओईएम ब्रैंड वाले इमोजी फ़ॉन्ट से बदलें.- अपनी स्थानीय बाज़ार की ज़रूरतों के हिसाब से,
NotoColorEmoji.ttf
फ़ाइल में बदलाव करें. - अन्य फ़ॉन्ट फ़ाइलों को बदलना या उनमें बदलाव करना.
अगर आपको AOSP में इमोजी फ़ॉन्ट में बदलाव नहीं करना है, तो आपको कोई कार्रवाई करने की ज़रूरत नहीं है. अगर आपको इमोजी फ़ॉन्ट को पसंद के मुताबिक बनाना है, तो यहां दिए गए निर्देशों का पालन करें.
NotoColorEmoji.ttf को ओईएम के ब्रैंड वाले इमोजी फ़ॉन्ट से बदलें
NotoColorEmoji.ttf
फ़ाइल को ओईएम के ब्रैंड वाले इमोजी फ़ॉन्ट की फ़ाइल से बदलने के लिए,
इमोजी फ़ॉन्ट को फ़ॉन्ट फ़ॉलबैक चेन से ठीक पहले रखें:
- अपने फ़ॉन्ट को
/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
फ़ाइल से ग्लिफ़ हटाने के लिए, पहले और दूसरे चरण का पालन करें. इसके बाद, अपने सीएमएपी में glyph ID = 0
तय करें.
क्षेत्रीय फ़्लैग का इस्तेमाल करें: अगर टारगेट ग्लिफ़ कोई क्षेत्रीय फ़्लैग है, तो ग्लिफ़ आईडी को अज्ञात देश के कोड के तौर पर सेट करें. (country code = "ZZ"
का इस्तेमाल करें.)
तोफ़ू ग्लिफ़ बनाना: अगर आपको तोफ़ू ग्लिफ़ का इस्तेमाल करना है, तो तोफ़ू ग्लिफ़ आईडी साफ़ तौर पर बताया जा सकता है. glyphID = 0
एट्रिब्यूट की वैल्यू सेट करने पर, इससे जुड़ा ऐप्लिकेशन इसे “ग्लिफ़ उपलब्ध नहीं है” के तौर पर समझता है. उदाहरण के लिए, इस एट्रिब्यूट का इस्तेमाल करने पर, Paint#hasGlyph
ऐप्लिकेशन false
वैल्यू दिखाता है.
अन्य फ़ॉन्ट फ़ाइलों को बदलना या उनमें बदलाव करना
अन्य फ़ॉन्ट बदलने या उनमें बदलाव करने का तरीका, स्थानीय बाज़ार की ज़रूरतों के हिसाब से टीटीएफ़ फ़ाइलों में बदलाव करने के तरीके जैसा ही होता है. ऐसी फ़ॉन्ट फ़ाइलों को अनदेखा किया जाता है जिनके बारे में जानकारी नहीं है और जिन्हें रनटाइम के दौरान AOSP में अपडेट किया जाता है. इन्हें अपडेट नहीं किया जाता. Google आपके डिवाइस में मौजूद ऐसे फ़ॉन्ट को अनदेखा करता है जिनके बारे में उसे जानकारी नहीं है. इसमें ऐसी फ़ॉन्ट फ़ाइलें शामिल हैं जिन्हें AOSP में मौजूद ओरिजनल फ़ॉन्ट में बदलाव करके बनाया गया है.
GMS Core में फ़ॉन्ट अपडेट करने का काम Google करता है. हालांकि, फ़ॉन्ट अपडेट करने का सामान्य तरीका सभी ओईएम के लिए उपलब्ध है. ओईएम, मीटिंग की ज़रूरी शर्तें, फ़ॉन्ट फ़ाइलों पर हस्ताक्षर करना, और रनटाइम के दौरान फ़ॉन्ट अपडेट करना में दिए गए चरणों का इस्तेमाल करके, फ़ॉन्ट अपडेट करने वाले अतिरिक्त प्रोग्राम इंस्टॉल कर सकते हैं.
ज़रूरी शर्तें पूरी करना
फ़ॉन्ट अपडेट करने की प्रोसेस में, fs-verity
Linux कर्नल सुविधा का इस्तेमाल किया जाता है. पुष्टि करें कि आपका डिवाइस fs-verity
के मुताबिक है. साथ ही, डिवाइस में सर्टिफ़िकेट शामिल करें.
फ़ॉन्ट फ़ाइलों पर हस्ताक्षर करना
फ़ॉन्ट फ़ाइलें जोखिम भरी संसाधन होती हैं. इसलिए, इनकी पुष्टि भरोसेमंद कुंजियों से की जानी चाहिए.
अपडेट की जाने वाली सभी फ़ॉन्ट फ़ाइलों को ध्यान से देखें. इसके बाद, अपनी निजी कुंजी से हस्ताक्षर करें. हस्ताक्षर,fs-verity
के साथ काम करने वाला होना चाहिए.
रनटाइम के दौरान फ़ॉन्ट अपडेट करना
FontManager
सिस्टम ऐप्लिकेशन, फ़ॉन्ट अपडेट करता है. FontManager
ऐप्लिकेशन, सिस्टम में इंस्टॉल किए गए फ़ॉन्ट की मौजूदा स्थिति के बारे में जानकारी देता है. साथ ही, यह हस्ताक्षर वाली फ़ॉन्ट फ़ाइलों को अपडेट करने की सुविधा भी देता है. ऐप्लिकेशन अपडेट करने के लिए, UPDATE_FONT signature|privileged
अनुमति को अनुमति मिले ऐप्लिकेशन की सूची और मेनिफ़ेस्ट में जोड़ें.
अपने ऐप्लिकेशन के अपडेटर फ़ंक्शन को UPDATE_FONT signature|privileged
अनुमति दें.