تنفيذ الخطوط المخصّصة

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

في الإصدار 11 من نظام Android والإصدارات الأقدم، يتطلب تعديل ملفات الخطوط المثبَّتة على الجهاز في 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، ثم يتم إعداد إعدادات الخط لاستخدامها من خلال عملية التطبيق.

دعم الخطوط المختلفة

بدءًا من الإصدار 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 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 لوظيفت تعديل التطبيق .