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

في Android 11 والإصدارات الأقدم، يتطلب تحديث ملفات الخطوط المثبتة على الجهاز في AOSP (في قسم /system/fonts ) أو أقسام البائع (في أقسام /product/fonts أو /system/fonts ) تحديث النظام من OEM. هذا المطلب له تأثير كبير على توافق الرموز التعبيرية. في 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 ؛ ثم يقوم بتهيئة إعدادات الخط لاستخدامها من خلال عملية التطبيق.

تخصيص الخطوط

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

يقوم Google بتحديث ملفات الخطوط، وخاصة ملفات NotoColorEmoji من خلال GMS Core، لذا لا تقم بتعديل أو إزالة ملف NotoColorEmoji.ttf من قسم /system ، ولا تقم بإزالته من /system/etc/fonts.xml . لاحظ الطرق الثلاث التالية التي يمكنك من خلالها تخصيص الخطوط الخاصة بك:

  1. استبدل ملف NotoColorEmoji.ttf بخط emoji يحمل العلامة التجارية OEM.
  2. قم بتعديل ملف NotoColorEmoji.ttf ليناسب احتياجات السوق المحلية لديك.
  3. استبدال أو تعديل ملفات الخطوط الأخرى.

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

استبدل NotoColorEmoji.ttf بخطوط الرموز التعبيرية التي تحمل العلامة التجارية OEM

لاستبدال ملف NotoColorEmoji.ttf بملف خطوط emoji التي تحمل العلامة التجارية OEM، ضع خط emoji قبل السلسلة الاحتياطية للخط مباشرةً:

  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 الأصلي. توصي جوجل بما يلي:

  • احتفظ فقط بالحرف الرسومي الضروري في هذا الخط.
  • قم بتفويض الصور الرمزية غير المعدلة إلى ملف NotoColorEmoji.ttf الأصلي حتى تتلقى أجهزتك أي إصلاحات في التصميم تم إجراؤها في إصدارات الرموز التعبيرية المستقبلية.

إزالة الصور الرمزية: لإزالة الصور الرمزية من ملف NotoColorEmoji.ttf ، اتبع الخطوتين 1 و2، وحدد glyph ID = 0 في cmap الخاص بك.

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

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

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

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

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

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

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

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

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

قم بإجراء تحديثات للخطوط في وقت التشغيل

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

قم بتوفير UPDATE_FONT signature|privileged لوظيفة تحديث تطبيقك.