تنفيذ خط مخصص احتياطي

في نظام التشغيل 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 Fonts. هذا التخزين محمي. يمكن كتابتها بواسطة FontManagerService فقط ، من خلال سياسة SELinux.

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

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

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

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

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

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

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

لاستبدال ملف NotoColorEmoji.ttf بملف خطوط الرموز التعبيرية التي تحمل علامة 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 الأصلي. توصي Google بما يلي:

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

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

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

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

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

لاستبدال الخطوط الأخرى أو تعديلها ، يكون التخصيص مشابهًا لتعديل ملفات tff لاحتياجات السوق المحلية. يتم تجاهل ملفات الخطوط غير المعروفة التي يتم تحديثها في 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 لوظيفة مُحدِّث تطبيقك.