पसंद के मुताबिक फ़ॉन्ट लागू करना

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 Variable Font API और buildVariableFamily देखें.

फ़ॉन्ट को पसंद के मुताबिक बनाएं

कुछ ओईएम, अपने ब्रैंड दिखाने के लिए AOSP में फ़ॉन्ट फ़ाइलें इंस्टॉल करते हैं या उन्हें बदलते हैं. Android 12 में यह सुविधा काम करती है. हालांकि, इसमें डिवाइसों में इमोजी फ़ॉन्ट को अपडेट रखने के लिए कुछ ज़रूरी शर्तें जोड़ी गई हैं. जिन ओईएम ने इमोजी फ़ॉन्ट फ़ाइलों में बदलाव नहीं किया है या उन्हें अपडेट नहीं किया है उन्हें इस सुविधा का इस्तेमाल करने की ज़रूरत नहीं है.

Google, फ़ॉन्ट फ़ाइलों को अपडेट करता है. खास तौर पर, GMS Core के ज़रिए NotoColorEmoji फ़ाइलों को अपडेट किया जाता है. इसलिए, /system पार्टीशन से NotoColorEmoji फ़ाइल में बदलाव न करें या उसे न हटाएं. साथ ही, उसे /frameworks/base/data/fonts/fonts.xml से भी न हटाएं.NotoColorEmoji.ttf फ़ॉन्ट को पसंद के मुताबिक बनाने के तीन तरीके यहां दिए गए हैं:

  1. NotoColorEmoji.ttf फ़ाइल को ओईएम ब्रैंड वाले इमोजी फ़ॉन्ट से बदलें.
  2. अपनी स्थानीय बाज़ार की ज़रूरतों के हिसाब से, NotoColorEmoji.ttf फ़ाइल में बदलाव करें.
  3. अन्य फ़ॉन्ट फ़ाइलों को बदलना या उनमें बदलाव करना.

अगर आपको AOSP में इमोजी फ़ॉन्ट में बदलाव नहीं करना है, तो आपको कोई कार्रवाई करने की ज़रूरत नहीं है. अगर आपको इमोजी फ़ॉन्ट को पसंद के मुताबिक बनाना है, तो यहां दिए गए निर्देशों का पालन करें.

NotoColorEmoji.ttf को ओईएम के ब्रैंड वाले इमोजी फ़ॉन्ट से बदलें

NotoColorEmoji.ttf फ़ाइल को ओईएम के ब्रैंड वाले इमोजी फ़ॉन्ट की फ़ाइल से बदलने के लिए, इमोजी फ़ॉन्ट को फ़ॉन्ट फ़ॉलबैक चेन से ठीक पहले रखें:

  1. अपने फ़ॉन्ट को /system पार्टीशन में रखें. इसे OEMCustomEmoji.ttf कहा जाता है.
  2. नीचे दिए गए कोड के मुताबिक, /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 में बदलाव करना

स्थानीय बाज़ार की ज़रूरतों के हिसाब से बदलाव करने के लिए, यह तरीका अपनाएं:

  1. किसी दूसरे नाम से अपनी NotoColorEmoji फ़ाइल बनाएं. उदाहरण के लिए, इसका नाम Modified\_NotoColorEmoji.ttf रखें.
  2. इसे ओरिजनल NotoColorEmoji.ttf फ़ाइल से पहले रखें.

दूसरे चरण को पूरा करने के बाद, NotoColorEmoji.ttf के बजाय Modified\NotoColorEmoji.ttf के साथ काम करने वाला बदला हुआ ग्लिफ़ दिखता है. Google इन बातों का सुझाव देता है:

  • इस फ़ॉन्ट में सिर्फ़ ज़रूरी ग्लिफ़ मौजूद हों.
  • बिना बदलाव किए गए ग्लिफ़ को मूल NotoColorEmoji.ttf फ़ाइल में डेलिगेट करें, ताकि आपके डिवाइसों को आने वाले समय में इमोजी के डिज़ाइन में किए गए बदलाव मिल सकें.

ग्लिफ़ हटाना: NotoColorEmoji.ttf फ़ाइल से ग्लिफ़ हटाने के लिए, पहले और दूसरे चरण का पालन करें. इसके बाद, अपने सीएमएपी में glyph ID = 0 तय करें.

क्षेत्रीय फ़्लैग का इस्तेमाल करें: अगर टारगेट ग्लिफ़ कोई क्षेत्रीय फ़्लैग है, तो ग्लिफ़ आईडी को अज्ञात देश के कोड के तौर पर सेट करें. (country code = "ZZ" का इस्तेमाल करें.)

टोफ़ू ग्लिफ़ बनाना: अगर आपको टोफ़ू ग्लिफ़ का इस्तेमाल करना है, तो टोफ़ू ग्लिफ़ आईडी साफ़ तौर पर बताया जा सकता है. glyphID = 0 एट्रिब्यूट की वैल्यू के तौर पर “glyph is not available” सेट करने पर, इससे जुड़ा ऐप्लिकेशन इसे “ग्लिफ़ उपलब्ध नहीं है” के तौर पर समझता है. उदाहरण के लिए, इस एट्रिब्यूट का इस्तेमाल करने पर, 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 अनुमति दें.