اعتبارًا من Android 15، يتم عرض الخطوط المتغيرة في وقت التشغيل بكفاءة ودقة أفضل. في إطار هذا التعديل، على المورّدين إضافة إعدادات جديدة للخطوط المتغيرة إلى font_fallback.xml
بدلاً من fonts.xml
، لأنّه سيتم إيقاف fonts.xml
نهائيًا.
لمزيد من المعلومات، اطّلِع على التوافق مع الخطوط المتغيرة.
في نظام التشغيل Android 11 والإصدارات الأقدم، يتطلّب تعديل ملفات الخطوط المثبَّتة على الجهاز في مشروع Android المفتوح المصدر (AOSP) (في القسم /system/fonts
) أو أقسام المورّد (في القسمين /product/fonts
أو /system/fonts
) إجراء تحديث للنظام من الشركة المصنّعة للجهاز الأصلي (OEM). ولهذا الشرط تأثير كبير على توافق رموز الإيموجي. في نظام التشغيل Android 12، يمكنك استخدام خدمة FontManager
التابعة للنظام لإدارة ملفات الخطوط المثبَّتة وتحديث ملفات الخطوط المثبَّتة على الجهاز بدون الحاجة إلى تحديث النظام.
يتضمّن الإصدار 12 من نظام التشغيل Android ثلاثة أنواع من تفاعلات العمليات، وهي 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 وbuildVariableFamily
.
تخصيص الخطوط
تثبّت بعض الشركات المصنّعة الأصلية للجهاز ملفات الخطوط أو تستبدلها في مشروع Android مفتوح المصدر (AOSP) لعرض علاماتها التجارية. يتوافق الإصدار 12 من نظام التشغيل Android مع هذه الوظيفة، ولكنّه يضيف متطلبات للحفاظ على تحديث خطوط الإيموجي في الأجهزة. لا يحتاج المصنّعون الأصليون للأجهزة إلى استخدام هذه الميزة إذا كانوا لا يعدّلون ملفات خطوط الرموز التعبيرية أو يحدّثونها.
تعدّل Google ملفات الخطوط، خاصةً ملفات NotoColorEmoji
، من خلال GMS
Core، لذا لا تعدّل ملف NotoColorEmoji.ttf
أو تزله من القسم /system
، ولا تزله من /frameworks/base/data/fonts/fonts.xml
.
في ما يلي ثلاث طرق لتخصيص الخطوط:
- استبدِل ملف
NotoColorEmoji.ttf
بخط إيموجي يحمل علامة تجارية خاصة بمصنّع المعدات الأصلية. - عدِّل ملف
NotoColorEmoji.ttf
بما يتناسب مع احتياجات السوق المحلية. - استبدال ملفات خطوط أخرى أو تعديلها
إذا كنت لا تعدّل خطوط الرموز التعبيرية في AOSP، ليس عليك اتّخاذ أي إجراء. إذا أردت تخصيص خطوط رموز الإيموجي، اتّبِع التعليمات الواردة في الأقسام التالية.
استبدال NotoColorEmoji.ttf بخطوط إيموجي تحمل العلامة التجارية لمصنّع المعدات الأصلية
لاستبدال ملف NotoColorEmoji.ttf
بملف خطوط رموز إيموجي تحمل العلامة التجارية لمصنّع المعدات الأصلية،
ضَع ملف خطوط رموز الإيموجي قبل سلسلة خطوط النسخ الاحتياطي:
- ضَع خطك الخاص، والذي يُطلق عليه
OEMCustomEmoji.ttf
، في القسم/system
. عدِّل
/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 بما يتناسب مع احتياجات السوق المحلية
اتّبِع الخطوات التالية لتخصيص المحتوى بما يتناسب مع احتياجات السوق المحلية:
- أنشئ ملف
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: يمكنك تحديد معرّف رمز tofu بشكل صريح إذا أردت استخدام رمز. عند تحديد glyphID = 0
، يفسّر التطبيق المرتبط ذلك على أنّه
"الرمز غير متوفّر". على سبيل المثال، عند استخدام هذه السمة، يعرض تطبيق
Paint#hasGlyph
الرمز false
.
استبدال ملفات خطوط أخرى أو تعديلها
لاستبدال الخطوط الأخرى أو تعديلها، تكون عملية التخصيص مشابهة لتعديل ملفات TTF لتلبية احتياجات السوق المحلية. يتم تجاهل ملفات الخطوط غير المعروفة التي يتم تعديلها في AOSP أثناء وقت التشغيل، ولا يتم تعديلها. تتجاهل Google أشكال الخطوط غير المعروفة على جهازك. ويشمل ذلك ملفات الخطوط التي تم تعديلها من الخطوط الأصلية في مشروع Android مفتوح المصدر (AOSP).
على الرغم من أنّ Google هي الجهة التي تجري تحديثات الخطوط في GMS Core، فإنّ آلية تحديث الخطوط العامة متاحة لجميع الشركات المصنّعة للأجهزة الأصلية. يمكن لمصنّعي المعدات الأصلية تثبيت أدوات تعديل إضافية للخطوط باتّباع الخطوات الواردة في استيفاء المتطلبات الأساسية وتوقيع ملفات الخطوط وإجراء تعديلات على الخطوط أثناء وقت التشغيل.
استيفاء المتطلبات الأساسية
تستخدم آلية تحديث الخطوط ميزة fs-verity
في نواة Linux. تأكَّد من أنّ جهازك متوافق مع fs-verity
وأدرِج الشهادة في جهازك.
ملفات خطوط الإشارات
بما أنّ ملفات الخطوط هي موارد محفوفة بالمخاطر، يجب التحقّق منها باستخدام مفاتيح موثوقة.
راجِع بعناية جميع ملفات الخطوط التي سيتم تعديلها، ووقِّع باستخدام مفتاحك الخاص. يجب أن يكون التوقيعfs-verity
متوافقًا.
إجراء تعديلات على الخط أثناء وقت التشغيل
يُجري تطبيق النظام FontManager
تحديثات الخطوط. يوفر تطبيق FontManager
حالة خط النظام المثبَّت الأخير وإمكانية تعديل ملفات الخطوط باستخدام التواقيع. لاستدعاء تطبيقات التحديث، أضِف الإذن UPDATE_FONT signature|privileged
إلى قائمة التطبيقات المسموح بها وإلى ملف البيان.
امنح إذن UPDATE_FONT signature|privileged
لوظيفة تحديث التطبيق.