در Android 11 و پایینتر، بهروزرسانی فایلهای فونت نصبشده در دستگاه در AOSP (در پارتیشن /system/fonts
) یا پارتیشنهای فروشنده (در پارتیشنهای /product/fonts
یا /system/fonts
) به بهروزرسانی سیستم از OEM نیاز دارد. این نیاز تاثیر قابل توجهی بر سازگاری ایموجی دارد. در اندروید 12 می توانید از سرویس سیستم FontManager
برای مدیریت فایل های فونت نصب شده و به روز رسانی فایل های فونت نصب شده در دستگاه بدون به روز رسانی سیستم استفاده کنید.
اندروید 12 دارای سه تعامل فرآیندی است. FontManagerService
، Font Updater
و Application
.
FontManagerService
سیستم مدیریت مرکزی در سرور سیستم است. FontManagerService
آخرین تنظیمات فونت سیستم برای هر کاربر را ذخیره می کند.
FontUpdater
یک بهروزرسانی فونت قابل اتصال است که توسط یک signature|privileged
قابل اعتماد است. FontUpdater
با FontManagerService
برای دریافت، نصب، حذف یا به روز رسانی تنظیمات فونت فعلی سیستم ارتباط برقرار می کند. FontUpdater
می تواند محتویات فایل فونت جدید را با مکانیزم های ارتباطات بین فرآیندی (IPC) ارسال کند. FontManagerService
محتویات را در یک مکان ذخیره سازی قابل خواندن در جهان ذخیره می کند، مانند فایل های /data/fonts
. این انبار محافظت می شود. این را می توان فقط توسط FontManagerService
، توسط خط مشی SELinux نوشت.
هنگامی که کلاس Application
راه اندازی می شود، تنظیمات فونت سیستم را به عنوان آرگومان های متد bindApplication
می کند. سپس تنظیمات فونت را برای استفاده در فرآیند برنامه تنظیم می کند.
پیاده سازی فونت های سفارشی
برخی OEM ها فایل های فونت را در AOSP نصب یا جایگزین می کنند تا مارک های خود را نشان دهند. اندروید 12 از این قابلیت پشتیبانی می کند، اما الزاماتی را برای به روز نگه داشتن فونت های ایموجی در دستگاه ها اضافه می کند. OEM هایی که فایل های فونت ایموجی را اصلاح یا به روز نمی کنند، نیازی به استفاده از این ویژگی ندارند.
Google فایلهای فونت، بهویژه فایلهای NotoColorEmoji
را از طریق GMS Core بهروزرسانی میکند، بنابراین فایل NotoColorEmoji.ttf
را از پارتیشن /system
تغییر یا حذف نکنید و آن را از /system/etc/fonts.xml
حذف نکنید. به سه روش زیر توجه کنید که می توانید فونت های خود را سفارشی کنید:
- فایل
NotoColorEmoji.ttf
را با یک فونت emoji با مارک OEM جایگزین کنید. - فایل
NotoColorEmoji.ttf
را برای نیازهای بازار محلی خود تغییر دهید. - فایل های فونت دیگر را جایگزین یا تغییر دهید.
اگر فونت های ایموجی را در AOSP تغییر نمی دهید، نیازی به اقدام ندارید. اگر میخواهید فونتهای ایموجی را سفارشی کنید، از دستورالعملهای بخشهای زیر استفاده کنید.
جایگزینی NotoColorEmoji.ttf با فونت های ایموجی با مارک OEM
برای جایگزینی فایل NotoColorEmoji.ttf
با فایل فونتهای emoji با مارک 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
اصلی نشان داده می شود. گوگل موارد زیر را توصیه می کند:
- فقط گلیف لازم را در این فونت داشته باشید.
- حروفهای اصلاحنشده را به فایل اصلی
NotoColorEmoji.ttf
تا دستگاههای شما هر گونه اصلاحات طراحی ایجاد شده در نسخههای اموجی آینده را دریافت کنند.
Remove Glyphs: برای حذف حروف از فایل NotoColorEmoji.ttf
، مراحل 1 و 2 را دنبال کنید و glyph ID = 0
را در cmap خود مشخص کنید.
از پرچم منطقه ای استفاده کنید: اگر علامت هدف یک پرچم منطقه ای است، شناسه علامت را به عنوان کد کشور ناشناخته مشخص کنید. (از country code = "ZZ"
استفاده کنید.)
یک علامت توفو بسازید: اگر میخواهید از آن استفاده کنید، میتوانید به صراحت یک شناسه علامت توفو را مشخص کنید. وقتی glyphID = 0
را مشخص میکنید، برنامه مربوطه آن را بهعنوان «گلیف در دسترس نیست» تفسیر میکند. برای مثال، وقتی از این ویژگی استفاده میکنید، برنامه Paint#hasGlyph
false
را برمیگرداند.
فایل های فونت دیگر را جایگزین یا تغییر دهید
برای جایگزینی یا تغییر فونتهای دیگر، سفارشیسازی شبیه به تغییر فایلهای tff
برای نیازهای بازار محلی است. فایل های فونت ناشناخته ای که در زمان اجرا در AOSP به روز می شوند نادیده گرفته می شوند و به روز نمی شوند. گوگل فونت های ناشناخته را در دستگاه شما نادیده می گیرد. این شامل فایلهای فونتی میشود که از فونتهای اصلی در AOSP اصلاح شدهاند.
اگرچه به روز رسانی فونت توسط گوگل در GMS Core انجام می شود، مکانیسم عمومی به روز رسانی فونت برای همه OEM ها باز است. OEM ها می توانند با استفاده از مراحل پیش نیازهای جلسه ، امضای فایل های فونت و ایجاد به روز رسانی فونت زمان اجرا، به روز رسانی فونت های اضافی را نصب کنند.
پیش نیازهای جلسه
مکانیسم به روز رسانی فونت از ویژگی هسته لینوکس fs-verity
استفاده می کند. بررسی کنید که دستگاه شما با fs-verity
سازگار است و گواهی را در دستگاه خود قرار دهید.
امضای فایل های فونت
از آنجایی که فایل های فونت منابع خطرناکی هستند، باید با کلیدهای قابل اعتماد تأیید شوند. همه فایل های فونتی که قرار است به روز شوند را به دقت بررسی کنید و با کلید خصوصی خود امضا کنید. امضا باید با fs-verity
سازگار باشد.
ایجاد به روز رسانی فونت زمان اجرا
برنامه FontManger
System به روز رسانی فونت را انجام می دهد. برنامه FontManager
آخرین وضعیت فونت سیستم نصب شده و توانایی به روز رسانی فایل های فونت با امضا را فراهم می کند. برای فراخوانی برنامههای بهروزرسانی، UPDATE_FONT signature|privileged
مجوز را به فهرست مجاز برنامهها و به مانیفست خود اضافه کنید .
UPDATE_FONT signature|privileged
را برای عملکرد بهروزرسانی برنامه خود ارائه دهید.