پیاده‌سازی قلم‌های سفارشی

از Android 15، قلم‌های متغیر با کارایی و جزئیات بهتر در زمان اجرا پرداز می‌شوند. با این به‌روزرسانی، فروشندگان باید پیکربندی‌های جدید قلم متغیر را به font_fallback.xml به‌جای fonts.xml اضافه کنند، زیرا fonts.xml منسوخ شده است. برای اطلاعات بیشتر، به پشتیبانی از قلم‌های متغیر مراجعه کنید.

در 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 ارسال می‌کند؛ سپس تنظیمات قلم را برای استفاده در فرایند برنامه مقداردهی اولیه می‌کند.

پشتیبانی از قلم‌های متغیر

از 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» نصب یا جایگزین می‌کنند. ‫Android 12 از این قابلیت پشتیبانی می‌کند، اما شرایطی را برای به‌روز نگه داشتن قلم‌های اموجی در دستگاه‌ها اضافه می‌کند. «تولیدکنندگان تجهیزات اصلی» که فایل‌های قلم اموجی را اصلاح یا به‌روزرسانی نمی‌کنند نیازی به استفاده از این ویژگی ندارند.

Google فایل‌های قلم، به‌ویژه فایل‌های NotoColorEmoji را ازطریق GMS Core به‌روز می‌کند، بنابراین فایل NotoColorEmoji.ttf را از بخش /system تغییر ندهید یا حذف نکنید، و آن را از /frameworks/base/data/fonts/fonts.xml حذف نکنید. به سه روش زیر که می‌توانید قلم‌هایتان را سفارشی‌سازی کنید توجه کنید:

  1. فایل NotoColorEmoji.ttf را با قلم اموجی با نمانام OEM جایگزین کنید.
  2. فایل NotoColorEmoji.ttf را برای نیازهای بازار محلی‌تان اصلاح کنید.
  3. جایگزین کردن یا اصلاح کردن فایل‌های قلم دیگر.

اگر درحال اصلاح کردن قلم‌های اموجی در AOSP نیستید، نیازی نیست اقدامی انجام دهید. اگر می‌خواهید قلم‌های اموجی را سفارشی‌سازی کنید، از دستورالعمل‌های بخش‌های زیر استفاده کنید.

جایگزین کردن NotoColorEmoji.ttf با قلم‌های اموجی با نمانام OEM

برای جایگزین کردن فایل NotoColorEmoji.ttf با فایل قلم اموجی با نمانام سازنده اصلی تجهیزات، قلم اموجی را درست قبل‌از زنجیره قلم بازگشتی قرار دهید:

  1. قلم خودتان را که OEMCustomEmoji.ttf نام دارد در پارتیشن /system قرار دهید.
  2. ‫/frameworks/base/data/fonts/fonts.xml (و /frameworks/base/data/fonts/font-fallback.xml در Android 15 و نسخه‌های بالاتر) را مطابق با کد زیر اصلاح کنید:

    <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 قرار دهید.

پس‌از انجام مرحله ۲، گلیک تغییریافته پشتیبانی‌شده توسط Modified\NotoColorEmoji.ttf به‌جای NotoColorEmoji.ttf اصلی نشان داده می‌شود. ‫Google موارد زیر را توصیه می‌کند:

  • فقط نویسه لازم را در این قلم داشته باشید.
  • گلیک‌های بدون تغییر را به فایل اصلی NotoColorEmoji.ttf واگذار کنید تا دستگاه‌هایتان اصلاحات طراحی انجام‌شده در نسخه‌های آینده اموجی را دریافت کنند.

برداشتن گلیف‌ها: برای برداشتن گلیف‌ها از فایل NotoColorEmoji.ttf، مراحل ۱ و ۲ را دنبال کنید و glyph ID = 0 را در cmap خود مشخص کنید.

استفاده از پرچم منطقه‌ای: اگر نویسه هدف پرچم منطقه‌ای است، شناسه نویسه را به‌عنوان کد کشور ناشناخته مشخص کنید. (از country code = "ZZ" استفاده کنید.)

ساختن گلیف tofu: اگر می‌خواهید از گلیف tofu استفاده کنید، می‌توانید به‌طور صریح شناسه گلیف tofu را مشخص کنید. وقتی glyphID = 0 را مشخص می‌کنید، برنامه مربوطه آن را به‌عنوان «گلیک دردسترس نیست» تفسیر می‌کند. برای مثال، وقتی از این مشخصه استفاده می‌کنید، برنامه Paint#hasGlyph نماد false را برمی‌گرداند.

جایگزین کردن یا اصلاح کردن فایل‌های قلم دیگر

برای جایگزین کردن یا اصلاح کردن قلم‌های دیگر، سفارشی‌سازی مشابه سفارشی‌سازی اصلاح فایل‌های TTF برای نیازهای بازار محلی است. فایل‌های قلم ناشناخته‌ای که در زمان اجرا در AOSP به‌روزرسانی می‌شوند نادیده گرفته می‌شوند و به‌روزرسانی نمی‌شوند. Google قلم‌های ناشناخته را در دستگاهتان نادیده می‌گیرد. این شامل فایل‌های قلمی است که از قلم‌های اصلی در AOSP اصلاح شده‌اند.

اگرچه به‌روزرسانی‌های قلم توسط Google در «هسته سرویس‌های تلفن همراه Google» انجام می‌شود، سازوکار کلی به‌روزرسانی قلم برای همه سازندگان اصلی تجهیزات باز است. سازندگان تجهیزات اصلی می‌توانند بااستفاده از مراحل موجود در پیش‌نیازهای جلسه، امضای فایل‌های قلم، و انجام به‌روزرسانی‌های قلم زمان اجرا، به‌روزرسان‌های قلم اضافی نصب کنند.

پیش‌نیازهای Meet

سازوکار به‌روزرسانی قلم از ویژگی هسته Linux fs-verity استفاده می‌کند. تأیید کنید که دستگاهتان با fs-verity سازگار است و گواهینامه را در دستگاهتان قرار دهید.

امضای فایل‌های قلم

ازآنجایی‌که فایل‌های قلم منابع خطرناکی هستند، باید با کلیدهای معتمد درستی‌سنجی شوند. همه فایل‌های قلمی را که قرار است به‌روزرسانی شوند به‌دقت بررسی کنید و با کلید خصوصی خود امضا کنید. امضا باید با fs-verity سازگار باشد.

به‌روزرسانی قلم زمان اجرا

برنامه سیستم FontManager به‌روزرسانی‌های قلم را انجام می‌دهد. برنامه FontManager وضعیت جدیدترین قلم سیستم نصب‌شده و امکان به‌روزرسانی فایل‌های قلم با امضا را فراهم می‌کند. برای فراخوانی برنامه‌های به‌روزرسانی، اجازه UPDATE_FONT signature|privileged را به فهرست مجاز برنامه و به مانیفست اضافه کنید.

اجازه UPDATE_FONT signature|privileged را به عملکرد به‌روزرسان برنامه‌تان بدهید.