কাস্টম ফন্ট বাস্তবায়ন

অ্যান্ড্রয়েড 15 থেকে শুরু করে, ভেরিয়েবল ফন্টগুলি রানটাইমে ভাল দক্ষতা এবং গ্রানুলারিটির সাথে রেন্ডার করা হয়। এই আপডেটের সাথে, বিক্রেতাদের অবশ্যই font_fallback.xml এ নতুন পরিবর্তনশীল ফন্ট কনফিগারেশন যোগ করতে হবে fonts.xml এর পরিবর্তে, কারণ fonts.xml অবচয় হচ্ছে। আরও তথ্যের জন্য পরিবর্তনশীল ফন্টের জন্য সমর্থন দেখুন।

অ্যান্ড্রয়েড 11 এবং তার নিচের সংস্করণে, AOSP ( /system/fonts পার্টিশনে) বা ভেন্ডর পার্টিশনে ( /product/fonts বা /system/fonts পার্টিশনে) ডিভাইস-ইনস্টল করা ফন্ট ফাইল আপডেট করার জন্য OEM থেকে একটি সিস্টেম আপডেট প্রয়োজন। এই প্রয়োজনীয়তা ইমোজি সামঞ্জস্যের উপর উল্লেখযোগ্য প্রভাব ফেলে। অ্যান্ড্রয়েড 12-এ আপনি ইনস্টল করা ফন্ট ফাইলগুলি পরিচালনা করতে এবং সিস্টেম আপডেট ছাড়াই ডিভাইস-ইনস্টল করা ফন্ট ফাইলগুলিকে আপডেট করতে FontManager সিস্টেম পরিষেবা ব্যবহার করতে পারেন।

অ্যান্ড্রয়েড 12 তিনটি প্রক্রিয়া মিথস্ক্রিয়া বৈশিষ্ট্য বৈশিষ্ট্য; FontManagerService , Font Updater , এবং Application

FontManagerService হল সিস্টেম সার্ভারের কেন্দ্রীয় ব্যবস্থাপনা ব্যবস্থা। FontManagerService সর্বশেষ প্রতি ব্যবহারকারী সিস্টেম ফন্ট সেটিংস সংরক্ষণ করে।

FontUpdater হল একটি প্লাগেবল ফন্ট আপডেটার যা একটি signature|privileged অনুমতি চেক৷ FontUpdater বর্তমান সিস্টেম ফন্ট সেটিংস পেতে, ইনস্টল, অপসারণ বা আপডেট করতে FontManagerService এর সাথে যোগাযোগ করে। FontUpdater ইন্টার-প্রসেস কমিউনিকেশন (IPC) পদ্ধতির মাধ্যমে নতুন ফন্ট ফাইলের বিষয়বস্তু পাস করতে পারে। FontManagerService বিষয়বস্তুগুলিকে একটি বিশ্ব-পঠনযোগ্য সঞ্চয়স্থানে সংরক্ষণ করে, যেমন /data/fonts ফাইলগুলিতে। এই স্টোরেজ পাহারা দেওয়া হয়. এটি SELinux নীতি দ্বারা শুধুমাত্র FontManagerService দ্বারা লেখা যেতে পারে।

যখন Application ক্লাস চালু হয়, এটি bindApplication পদ্ধতির আর্গুমেন্ট হিসাবে সিস্টেম ফন্ট সেটিংস পাস করে; তারপর এটি অ্যাপ প্রক্রিয়া দ্বারা ব্যবহারের জন্য ফন্ট সেটিংস শুরু করে।

পরিবর্তনশীল ফন্টের জন্য সমর্থন

অ্যান্ড্রয়েড 15 থেকে শুরু করে, ভেরিয়েবল ফন্ট কনফিগারেশনগুলি font_fallback.xml এ নিম্নলিখিত ফর্ম্যাট ব্যবহার করে নির্দিষ্ট করা হয়েছে:

<family lang="und-Ethi" supportedAxes="wght,ital">
    <font>NotoSansEthiopic-VF.ttf</font>
</family>

এই বিন্যাসে, একটি পরিবর্তনশীল ফন্টে একটি অতিরিক্ত supportedAxes বৈশিষ্ট্য সহ একটি স্ট্যাটিক ফন্টের সমস্ত বৈশিষ্ট্য রয়েছে। একটি supportedAxes অ্যাট্রিবিউট হল সমর্থিত অক্ষ ট্যাগের একটি কমা দ্বারা পৃথক করা তালিকা। Android 15 এর সাথে, শুধুমাত্র wght এবং ital axes নির্দিষ্ট করা যেতে পারে।

supportedAxes অ্যাট্রিবিউট নির্দিষ্ট করা না থাকলে, font নোড axis শিশুদের সাথে নির্দিষ্ট একটি পরিবর্তনশীল ফন্টের একটি একক দৃষ্টান্তের স্ট্যাটিক ফন্ট হিসাবে কাজ করে।

supportedAxes অ্যাট্রিবিউট নির্দিষ্ট করা থাকলে, সিস্টেমটি রানটাইমে প্রদত্ত ওজন এবং শৈলী মানের জন্য গতিশীলভাবে একটি ফন্ট ইন্সট্যান্স তৈরি করে।

সিস্টেম-ইনস্টল করা ফন্ট ফাইলগুলির একটি তালিকা পেতে বিকাশকারীরা android.graphics.fonts.SystemFonts#getAvailableFonts Java API বা ASystemFontIterator_open NDK API ব্যবহার করতে পারেন। এই আপডেটটিকে সমর্থন করে এমন ডেভেলপার APIগুলির তথ্যের জন্য, উন্নত OpenType ভেরিয়েবল ফন্ট API এবং buildVariableFamily দেখুন।

ফন্ট কাস্টমাইজ করুন

কিছু OEM তাদের ব্র্যান্ড দেখানোর জন্য AOSP-এ ফন্ট ফাইল ইনস্টল বা প্রতিস্থাপন করে। অ্যান্ড্রয়েড 12 এই কার্যকারিতা সমর্থন করে, তবে ইমোজি ফন্টগুলিকে ডিভাইসে আপডেট রাখতে প্রয়োজনীয়তা যুক্ত করে। যে OEMগুলি ইমোজি ফন্ট ফাইলগুলি সংশোধন বা আপডেট করে না তাদের এই বৈশিষ্ট্যটি ব্যবহার করার প্রয়োজন নেই৷

Google ফন্ট ফাইলগুলি, বিশেষ করে NotoColorEmoji ফাইলগুলিকে GMS Core-এর মাধ্যমে আপডেট করে, তাই /system পার্টিশন থেকে NotoColorEmoji.ttf ফাইলটি পরিবর্তন বা সরান না এবং এটিকে /frameworks/base/data/fonts/fonts.xml নিম্নলিখিত তিনটি উপায়ে নোট করুন যে আপনি আপনার ফন্টগুলি কাস্টমাইজ করতে পারেন :

  1. NotoColorEmoji.ttf ফাইলটিকে একটি OEM-ব্র্যান্ডেড ইমোজি ফন্ট দিয়ে প্রতিস্থাপন করুন।
  2. আপনার স্থানীয় বাজারের প্রয়োজনের জন্য NotoColorEmoji.ttf ফাইলটি পরিবর্তন করুন।
  3. অন্যান্য ফন্ট ফাইলগুলি প্রতিস্থাপন বা পরিবর্তন করুন।

আপনি যদি AOSP-এ ইমোজি ফন্ট পরিবর্তন না করেন, তাহলে আপনাকে পদক্ষেপ নেওয়ার দরকার নেই। আপনি যদি ইমোজি ফন্টগুলি কাস্টমাইজ করতে চান তবে নিম্নলিখিত বিভাগে নির্দেশাবলী ব্যবহার করুন৷

NotoColorEmoji.ttfকে OEM-ব্র্যান্ডেড ইমোজি ফন্ট দিয়ে প্রতিস্থাপন করুন

আপনার OEM-ব্র্যান্ডেড ইমোজি ফন্ট ফাইলের সাথে NotoColorEmoji.ttf ফাইলটি প্রতিস্থাপন করতে, ফন্ট ফলব্যাক চেইনের ঠিক আগে ইমোজি ফন্ট রাখুন:

  1. OEMCustomEmoji.ttf নামে আপনার নিজস্ব ফন্ট /system পার্টিশনে রাখুন।
  2. নিম্নলিখিত কোড অনুসারে /frameworks/base/data/fonts/fonts.xml (এবং /frameworks/base/data/fonts/font-fallback.xml Android 15 এবং উচ্চতর) পরিবর্তন করুন:

    <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 রিটার্ন করে।

অন্যান্য ফন্ট ফাইলগুলি প্রতিস্থাপন বা পরিবর্তন করুন

অন্যান্য ফন্ট প্রতিস্থাপন বা পরিবর্তন করার জন্য, কাস্টমাইজেশন স্থানীয় বাজারের প্রয়োজনের জন্য TTF ফাইলগুলি পরিবর্তন করার মতো। রানটাইমে AOSP-এ আপডেট করা অজানা ফন্ট ফাইলগুলি উপেক্ষা করা হয়, এবং আপডেট করা হয় না। Google আপনার ডিভাইসে অজানা ফন্ট উপেক্ষা করে। এর মধ্যে ফন্ট ফাইলগুলি রয়েছে যা AOSP-এর মূল ফন্টগুলি থেকে পরিবর্তিত হয়েছে৷

যদিও ফন্ট আপডেটগুলি জিএমএস কোরে Google দ্বারা করা হয়, সাধারণ ফন্ট আপডেট প্রক্রিয়া সমস্ত OEM-এর জন্য উন্মুক্ত। OEMs মিটিং পূর্বশর্ত , ফন্ট ফাইল সাইন ইন করা এবং রানটাইম ফন্ট আপডেট করার ধাপগুলি ব্যবহার করে অতিরিক্ত ফন্ট আপডেটার ইনস্টল করতে পারে।

পূর্বশর্ত পূরণ

ফন্ট আপডেট প্রক্রিয়া fs-verity Linux কার্নেল বৈশিষ্ট্য ব্যবহার করে। আপনার ডিভাইস fs-verity সম্মত কিনা যাচাই করুন এবং আপনার ডিভাইসে সার্টিফিকেট অন্তর্ভুক্ত করুন।

ফন্ট ফাইল সাইন ইন করুন

যেহেতু ফন্ট ফাইলগুলি ঝুঁকিপূর্ণ সংস্থান, সেগুলিকে বিশ্বস্ত কী দিয়ে যাচাই করতে হবে৷ আপডেট করা হবে এমন সমস্ত ফন্ট ফাইল সাবধানে পর্যালোচনা করুন এবং আপনার ব্যক্তিগত কী দিয়ে সাইন ইন করুন। স্বাক্ষর অবশ্যই fs-verity সামঞ্জস্যপূর্ণ হতে হবে।

রানটাইম ফন্ট আপডেট করুন

FontManager সিস্টেম অ্যাপ ফন্ট আপডেট করে। FontManager অ্যাপটি সর্বশেষ ইনস্টল করা সিস্টেম ফন্ট স্ট্যাটাস এবং স্বাক্ষর সহ ফন্ট ফাইল আপডেট করার ক্ষমতা প্রদান করে। আপডেট অ্যাপ্লিকেশানগুলিকে কল করতে, UPDATE_FONT signature|privileged অনুমতি আপনার অ্যাপ অনুমোদন তালিকায় এবং আপনার ম্যানিফেস্টে যোগ করুন৷

আপনার অ্যাপের আপডেটার ফাংশনে UPDATE_FONT signature|privileged অনুমতি প্রদান করুন৷