استخدام خطوط مخصّصة

اعتبارًا من Android 15، يتم عرض الخطوط المتغيرة في وقت التشغيل بكفاءة ودقة أفضل. في إطار هذا التعديل، على المورّدين إضافة إعدادات جديدة للخطوط المتغيرة إلى font_fallback.xml بدلاً من fonts.xml، لأنّه سيتم إيقاف fonts.xml نهائيًا. لمزيد من المعلومات، اطّلِع على التوافق مع الخطوط المتغيرة.

في نظام التشغيل Android 11 والإصدارات الأقدم، يتطلّب تعديل ملفات الخطوط المثبَّتة على الجهاز في مشروع Android المفتوح المصدر (AOSP) (في القسم /system/fonts) أو أقسام المورّد (في القسمين /product/fonts أو /system/fonts) إجراء تحديث للنظام من الشركة المصنّعة للجهاز الأصلي (OEM). ولهذا الشرط تأثير كبير على توافق رموز الإيموجي. في نظام التشغيل Android 12، يمكنك استخدام خدمة FontManager التابعة للنظام لإدارة ملفات الخطوط المثبَّتة وتحديث ملفات الخطوط المثبَّتة على الجهاز بدون الحاجة إلى تحديث النظام.

يتضمّن الإصدار 12 من نظام التشغيل Android ثلاثة أنواع من تفاعلات العمليات، وهي FontManagerService وFont Updater وApplication.

FontManagerService هو نظام الإدارة المركزي في خادم النظام. يخزِّن FontManagerService أحدث إعدادات خط النظام لكل مستخدم.

FontUpdater هو برنامج لتعديل الخطوط يمكن توصيله، ويتم التحقّق من أمانه من خلال إذن signature|privileged. يتواصل FontUpdater مع FontManagerService للحصول على إعدادات خط النظام الحالي أو تثبيتها أو إزالتها أو تعديلها. يمكن أن يمرر FontUpdater محتوى ملف خط جديد من خلال آليات الاتصال بين العمليات (IPC). يحفظ 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.

تخصيص الخطوط

تثبّت بعض الشركات المصنّعة الأصلية للجهاز ملفات الخطوط أو تستبدلها في مشروع Android مفتوح المصدر (AOSP) لعرض علاماتها التجارية. يتوافق الإصدار 12 من نظام التشغيل Android مع هذه الوظيفة، ولكنّه يضيف متطلبات للحفاظ على تحديث خطوط الإيموجي في الأجهزة. لا يحتاج المصنّعون الأصليون للأجهزة إلى استخدام هذه الميزة إذا كانوا لا يعدّلون ملفات خطوط الرموز التعبيرية أو يحدّثونها.

تعدّل Google ملفات الخطوط، خاصةً ملفات NotoColorEmoji، من خلال GMS Core، لذا لا تعدّل ملف NotoColorEmoji.ttf أو تزله من القسم /system، ولا تزله من /frameworks/base/data/fonts/fonts.xml. في ما يلي ثلاث طرق لتخصيص الخطوط:

  1. استبدِل ملف NotoColorEmoji.ttf بخط إيموجي يحمل علامة تجارية خاصة بمصنّع المعدات الأصلية.
  2. عدِّل ملف NotoColorEmoji.ttf بما يتناسب مع احتياجات السوق المحلية.
  3. استبدال ملفات خطوط أخرى أو تعديلها

إذا كنت لا تعدّل خطوط الرموز التعبيرية في AOSP، ليس عليك اتّخاذ أي إجراء. إذا أردت تخصيص خطوط رموز الإيموجي، اتّبِع التعليمات الواردة في الأقسام التالية.

استبدال NotoColorEmoji.ttf بخطوط إيموجي تحمل العلامة التجارية لمصنّع المعدات الأصلية

لاستبدال ملف NotoColorEmoji.ttf بملف خطوط رموز إيموجي تحمل العلامة التجارية لمصنّع المعدات الأصلية، ضَع ملف خطوط رموز الإيموجي قبل سلسلة خطوط النسخ الاحتياطي:

  1. ضَع خطك الخاص، والذي يُطلق عليه OEMCustomEmoji.ttf، في القسم /system.
  2. عدِّل /frameworks/base/data/fonts/fonts.xml/frameworks/base/data/fonts/font-fallback.xml في الإصدار 15 من نظام التشغيل Android والإصدارات الأحدث) كما هو موضّح في الرمز التالي:

    <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، وحدِّد glyph ID = 0 في جدول cmap.

استخدام علم إقليمي: إذا كان الرمز المستهدف علمًا إقليميًا، حدِّد رقم تعريف الرمز كرمز بلد غير معروف. (استخدِم country code = "ZZ".)

إنشاء رمز tofu: يمكنك تحديد معرّف رمز tofu بشكل صريح إذا أردت استخدام رمز. عند تحديد glyphID = 0، يفسّر التطبيق المرتبط ذلك على أنّه "الرمز غير متوفّر". على سبيل المثال، عند استخدام هذه السمة، يعرض تطبيق Paint#hasGlyph الرمز false.

استبدال ملفات خطوط أخرى أو تعديلها

لاستبدال الخطوط الأخرى أو تعديلها، تكون عملية التخصيص مشابهة لتعديل ملفات TTF لتلبية احتياجات السوق المحلية. يتم تجاهل ملفات الخطوط غير المعروفة التي يتم تعديلها في AOSP أثناء وقت التشغيل، ولا يتم تعديلها. تتجاهل Google أشكال الخطوط غير المعروفة على جهازك. ويشمل ذلك ملفات الخطوط التي تم تعديلها من الخطوط الأصلية في مشروع Android مفتوح المصدر (AOSP).

على الرغم من أنّ Google هي الجهة التي تجري تحديثات الخطوط في GMS Core، فإنّ آلية تحديث الخطوط العامة متاحة لجميع الشركات المصنّعة للأجهزة الأصلية. يمكن لمصنّعي المعدات الأصلية تثبيت أدوات تعديل إضافية للخطوط باتّباع الخطوات الواردة في استيفاء المتطلبات الأساسية وتوقيع ملفات الخطوط وإجراء تعديلات على الخطوط أثناء وقت التشغيل.

استيفاء المتطلبات الأساسية

تستخدم آلية تحديث الخطوط ميزة fs-verity في نواة Linux. تأكَّد من أنّ جهازك متوافق مع fs-verity وأدرِج الشهادة في جهازك.

ملفات خطوط الإشارات

بما أنّ ملفات الخطوط هي موارد محفوفة بالمخاطر، يجب التحقّق منها باستخدام مفاتيح موثوقة. راجِع بعناية جميع ملفات الخطوط التي سيتم تعديلها، ووقِّع باستخدام مفتاحك الخاص. يجب أن يكون التوقيعfs-verity متوافقًا.

إجراء تعديلات على الخط أثناء وقت التشغيل

يُجري تطبيق النظام FontManager تحديثات الخطوط. يوفر تطبيق FontManager حالة خط النظام المثبَّت الأخير وإمكانية تعديل ملفات الخطوط باستخدام التواقيع. لاستدعاء تطبيقات التحديث، أضِف الإذن UPDATE_FONT signature|privileged إلى قائمة التطبيقات المسموح بها وإلى ملف البيان.

امنح إذن UPDATE_FONT signature|privileged لوظيفة تحديث التطبيق.