تطبيق الخطوط المخصصة

في نظام التشغيل 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 ؛ ثم يقوم بتهيئة إعدادات الخط لاستخدامها في عملية التطبيق.

تخصيص الخطوط

تقوم بعض الشركات المصنعة للمعدات الأصلية بتثبيت ملفات الخطوط أو استبدالها في 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" .)

إنشاء tofu glyph: يمكنك تحديد معرف tofu glyph بشكل صريح إذا كنت تريد استخدام واحد. عند تحديد glyphID = 0 ، يفسر التطبيق ذي الصلة ذلك على أنه "glyph غير متاح". على سبيل المثال ، عند استخدام هذه السمة ، يقوم تطبيق 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 لوظيفة مُحدِّث تطبيقك.