कस्टम फ़ॉन्ट फ़ॉलबैक लागू करना

Android 11 और उसके बाद के संस्करण में, AOSP ( /system/fonts पार्टीशन में) या वेंडर पार्टीशन ( /product/fonts या /system/fonts पार्टीशन में) में डिवाइस-स्थापित फ़ॉन्ट फ़ाइलों को अपडेट करने के लिए OEM से सिस्टम अपडेट की आवश्यकता होती है। इमोजी संगतता पर इस आवश्यकता का महत्वपूर्ण प्रभाव पड़ता है। एंड्रॉइड 12 में आप स्थापित फ़ॉन्ट फ़ाइलों को प्रबंधित करने और सिस्टम अपडेट के बिना डिवाइस-स्थापित फ़ॉन्ट फ़ाइलों को अपडेट करने के लिए FontManager सिस्टम सेवा का उपयोग कर सकते हैं।

एंड्रॉइड 12 में तीन प्रोसेस इंटरैक्शन हैं; FontManagerService , Font Updater , और Application

FontManagerService सिस्टम सर्वर में केंद्रीय प्रबंधन प्रणाली है। FontManagerService नवीनतम प्रति-उपयोगकर्ता सिस्टम फ़ॉन्ट सेटिंग्स संग्रहीत करता है।

FontUpdater एक प्लग करने योग्य फ़ॉन्ट अपडेटर है जिस पर signature|privileged अनुमति जाँच। FontUpdater वर्तमान सिस्टम फ़ॉन्ट सेटिंग्स को प्राप्त करने, स्थापित करने, हटाने या अपडेट करने के लिए FontManagerService के साथ संचार करता है। FontUpdater अंतर-प्रक्रिया संचार (आईपीसी) तंत्र द्वारा नई फ़ॉन्ट फ़ाइल सामग्री पास कर सकता है। FontManagerService सामग्री को विश्व-पढ़ने योग्य संग्रहण स्थान पर सहेजता है, जैसे कि /data/fonts फ़ाइलों में। यह भंडारण संरक्षित है। इसे केवल FontManagerService द्वारा SELinux नीति द्वारा लिखा जा सकता है।

जब Application क्लास लॉन्च होता है, तो यह सिस्टम फ़ॉन्ट सेटिंग्स को bindApplication विधि के तर्क के रूप में पास करता है; फिर यह एप्लिकेशन प्रक्रिया द्वारा उपयोग के लिए फ़ॉन्ट सेटिंग्स को इनिशियलाइज़ करता है।

कस्टम फोंट लागू करना

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

Google फ़ॉन्ट फ़ाइलों, विशेष रूप से NotoColorEmoji फ़ाइलों को जीएमएस कोर के माध्यम से अपडेट करता है, इसलिए /system विभाजन से NotoColorEmoji.ttf फ़ाइल को संशोधित या हटाएं नहीं, और इसे /system/etc/fonts.xml से न हटाएं। निम्नलिखित तीन तरीकों पर ध्यान दें जिनसे आप अपने फोंट को अनुकूलित कर सकते हैं:

  1. NotoColorEmoji.ttf फ़ाइल को OEM-ब्रांडेड इमोजी फ़ॉन्ट से बदलें।
  2. अपने स्थानीय बाज़ार की ज़रूरतों के लिए NotoColorEmoji.ttf फ़ाइल को संशोधित करें।
  3. अन्य फ़ॉन्ट फ़ाइलों को बदलें या संशोधित करें।

यदि आप AOSP में इमोजी फॉन्ट को संशोधित नहीं कर रहे हैं, तो आपको कार्रवाई करने की आवश्यकता नहीं है। यदि आप इमोजी फॉन्ट को कस्टमाइज़ करना चाहते हैं, तो निम्न अनुभागों में दिए गए निर्देशों का उपयोग करें।

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

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

  1. OEMCustomEmoji.ttf नामक अपना स्वयं का फ़ॉन्ट /system विभाजन में रखें।
  2. निम्नलिखित कोड के अनुसार /system/etc/fonts.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 फ़ाइल से पहले रखें।

आपके द्वारा चरण 2 निष्पादित करने के बाद, Modified\NotoColorEmoji.ttf द्वारा समर्थित संशोधित ग्लिफ़ मूल NotoColorEmoji.ttf के बजाय दिखाई देता है। Google निम्नलिखित की अनुशंसा करता है:

  • इस फ़ॉन्ट में केवल आवश्यक ग्लिफ़ है।
  • मूल NotoColorEmoji.ttf फ़ाइल में असंशोधित ग्लिफ़ सौंपें ताकि आपके डिवाइस भविष्य के इमोजी रिलीज़ में किए गए किसी भी डिज़ाइन सुधार को प्राप्त कर सकें।

ग्लिफ़ निकालें: NotoColorEmoji.ttf फ़ाइल से ग्लिफ़ निकालने के लिए, चरण 1 और 2 का पालन करें, और अपने cmap में glyph ID = 0 निर्दिष्ट करें।

क्षेत्रीय ध्वज का उपयोग करें: यदि लक्ष्य ग्लिफ़ एक क्षेत्रीय ध्वज है, तो ग्लिफ़ आईडी को अज्ञात देश कोड के रूप में निर्दिष्ट करें। ( country code = "ZZ" का प्रयोग करें।)

टोफू ग्लिफ़ बनाएं: यदि आप टोफू ग्लिफ़ आईडी का उपयोग करना चाहते हैं तो आप स्पष्ट रूप से एक टोफू ग्लिफ़ आईडी निर्दिष्ट कर सकते हैं। जब आप glyphID = 0 निर्दिष्ट करते हैं, तो संबंधित ऐप व्याख्या करता है कि "ग्लिफ़ उपलब्ध नहीं है"। उदाहरण के लिए, जब आप इस विशेषता का उपयोग करते हैं, तो Paint#hasGlyph ऐप false लौटाता है।

अन्य फ़ॉन्ट फ़ाइलों को बदलें या संशोधित करें

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

हालांकि जीएमएस कोर में Google द्वारा फ़ॉन्ट अपडेट किए जाते हैं, सामान्य फ़ॉन्ट अपडेट तंत्र सभी ओईएम के लिए खुला है। OEM पूर्वापेक्षाओं को पूरा करने, फ़ॉन्ट फ़ाइलों पर हस्ताक्षर करने और रनटाइम फ़ॉन्ट अपडेट करने के चरणों का उपयोग करके अतिरिक्त फ़ॉन्ट अद्यतनकर्ता स्थापित कर सकते हैं।

बैठक पूर्वापेक्षाएँ

फ़ॉन्ट अद्यतन तंत्र fs-verity Linux कर्नेल सुविधा का उपयोग करता है। सत्यापित करें कि आपका डिवाइस fs-verity के अनुरूप है और अपने डिवाइस में प्रमाणपत्र शामिल करें।

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

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

रनटाइम फ़ॉन्ट अपडेट करना

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

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