في نظام التشغيل 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
. لاحظ الطرق الثلاث التالية التي يمكنك من خلالها تخصيص الخطوط الخاصة بك:
- استبدل ملف
NotoColorEmoji.ttf
بخط رموز تعبيرية يحمل علامة OEM. - قم بتعديل ملف
NotoColorEmoji.ttf
لاحتياجات السوق المحلية الخاصة بك. - استبدال أو تعديل ملفات الخط الأخرى.
إذا لم تكن تقوم بتعديل خطوط الرموز التعبيرية في AOSP ، فلن تحتاج إلى اتخاذ أي إجراء. إذا كنت ترغب في تخصيص خطوط emoji ، فاستخدم الإرشادات الواردة في الأقسام التالية.
استبدل NotoColorEmoji.ttf بخطوط الرموز التعبيرية التي تحمل علامة OEM
لاستبدال ملف NotoColorEmoji.ttf
بملف خطوط الرموز التعبيرية التي تحمل علامة OEM ، ضع خط emoji قبل سلسلة الخط الاحتياطية:
- ضع الخط الخاص بك ، المسمى
OEMCustomEmoji.ttf
، في قسم/system
. قم بتعديل
/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 لاحتياجات السوق المحلية
اتبع هذه الخطوات لتخصيص احتياجات السوق المحلية الخاصة بك:
- قم بإنشاء ملف
NotoColorEmoji
الخاص بك باسم مختلف ؛ على سبيل المثال ، قم بتسميتهModified\_NotoColorEmoji.ttf
. - ضعه قبل ملف
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
لوظيفة مُحدِّث تطبيقك.