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

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 अपने ब्रैंड दिखाने के लिए, एओएसपी में फ़ॉन्ट फ़ाइलें इंस्टॉल करते हैं या बदलते हैं. यह सुविधा Android 12 पर काम करती है. हालांकि, इसमें इमोजी वाले फ़ॉन्ट को डिवाइसों में अपडेट करने की ज़रूरी शर्तें भी शामिल हैं. इमोजी फ़ॉन्ट फ़ाइलों में बदलाव या अपडेट न करने वाले OEM को इस सुविधा का इस्तेमाल करने की ज़रूरत नहीं है.

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

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

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

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

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

  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 एट्रिब्यूट की वैल्यू सबमिट करने पर, उससे जुड़ा ऐप्लिकेशन इसे “ग्लिफ़ उपलब्ध नहीं है” के तौर पर समझता है. उदाहरण के लिए, इस एट्रिब्यूट का इस्तेमाल करने पर, Paint#hasGlyph ऐप्लिकेशन false दिखाता है.

अन्य फ़ॉन्ट फ़ाइलों को बदलना या उनमें बदलाव करना

दूसरे फ़ॉन्ट को पसंद के मुताबिक बनाना, स्थानीय बाज़ार की ज़रूरतों के हिसाब से TTF फ़ाइलों में बदलाव करने जैसा ही होता है. रनटाइम के दौरान एओएसपी में अपडेट की जाने वाली अज्ञात फ़ॉन्ट फ़ाइलों को अनदेखा कर दिया जाता है और उन्हें अपडेट नहीं किया जाता है. Google आपके डिवाइस पर अनजान फ़ॉन्ट को अनदेखा कर देता है. इसमें वे फ़ॉन्ट फ़ाइलें शामिल हैं जिन्हें AOSP में मूल फ़ॉन्ट से बदला गया था.

फ़ॉन्ट अपडेट, Google की ओर से GMS Core में किए जाते हैं. हालांकि, फ़ॉन्ट अपडेट करने का सामान्य तरीका सभी OEM के लिए उपलब्ध है. OEM, ज़रूरी शर्तें पूरी करना, फ़ॉन्ट फ़ाइलों पर हस्ताक्षर करना, और रनटाइम फ़ॉन्ट अपडेट करना में बताए गए तरीके का इस्तेमाल करके, अतिरिक्त फ़ॉन्ट अपडेटर इंस्टॉल कर सकते हैं.

शर्तें पूरी करें

फ़ॉन्ट अपडेट करने का तरीका, fs-verity Linux कर्नेल सुविधा का इस्तेमाल करता है. पुष्टि करें कि आपका डिवाइस fs-verity के मुताबिक है और उसमें सर्टिफ़िकेट शामिल है.

फ़ॉन्ट फ़ाइलों पर हस्ताक्षर करना

फ़ॉन्ट फ़ाइलें जोखिम भरे संसाधन होती हैं, इसलिए उनकी पुष्टि भरोसेमंद कुंजियों से की जानी चाहिए. उन सभी फ़ॉन्ट फ़ाइलों की ध्यान से समीक्षा करें जिन्हें अपडेट करना है और अपनी निजी कुंजी से साइन करें. हस्ताक्षर,fs-verity के साथ काम करना चाहिए.

रनटाइम के फ़ॉन्ट में बदलाव करें

FontManager का सिस्टम ऐप्लिकेशन, फ़ॉन्ट को अपडेट करता है. FontManager ऐप्लिकेशन, इंस्टॉल किए गए नए सिस्टम फ़ॉन्ट का स्टेटस उपलब्ध कराता है. साथ ही, फ़ॉन्ट फ़ाइलों को हस्ताक्षर के साथ अपडेट करने की सुविधा भी देता है. ऐप्लिकेशन अपडेट करने के लिए कॉल करने के लिए, UPDATE_FONT signature|privileged की अनुमति को ऐप्लिकेशन की अनुमति वाली सूची और अपने मेनिफ़ेस्ट में शामिल करें.

अपने ऐप्लिकेशन के अपडेटर फ़ंक्शन को UPDATE_FONT signature|privileged की अनुमति दें.