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

اعتبارًا من Android 15، يتم عرض الخطوط المتغيرة أثناء التشغيل بكفاءة ونطاق أفضل. بعد هذا التعديل، على المورّدين إضافة إعدادات جديدة للخطوط المتغيّرة إلى font_fallback.xml بدلاً من fonts.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 تمرير محتوى ملف الخط الجديد من خلال آليات التواصل بين العمليات (IPC). تُخزِّن FontManagerService المحتوى في موقع تخزين يمكن للجميع قراءته، مثل ملفات /data/fonts. يتم حماية هذا المخزن. يمكن كتابتها من قِبل FontManagerService فقط، من خلال سياسة SELinux.

عند تشغيل فئة Application، يتم تمرير إعدادات خط النظام كصعوبات لطريقة bindApplication، ثم يتم إعداد إعدادات الخط لاستخدامها من خلال عملية التطبيق.

إتاحة الخطوط المتغيّرة

بدءًا من الإصدار 15 من Android، يتم تحديد إعدادات الخطوط المتغيّرة في 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 ملفات الخطوط، خاصةً ملفات 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 في جدول ترميز الأحرف.

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

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

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

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

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

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

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

توقيع ملفات الخطوط

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

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

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

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