با شروع اندروید 15، فونت های متغیر در زمان اجرا با کارایی و جزئیات بهتر رندر می شوند. با این بهروزرسانی، فروشندگان باید تنظیمات فونت متغیر جدیدی را به جای fonts.xml
به font_fallback.xml
اضافه کنند، زیرا fonts.xml
در حال منسوخ شدن است. برای اطلاعات بیشتر به پشتیبانی از فونت های متغیر مراجعه کنید.
در 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
ارسال می کند. سپس تنظیمات فونت را برای استفاده در فرآیند برنامه تنظیم می کند.
پشتیبانی از فونت های متغیر
با شروع در Android 15، تنظیمات فونت متغیر در font_fallback.xml
با استفاده از قالب زیر مشخص میشوند:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
در این قالب، یک فونت متغیر دارای تمام ویژگیهای یک فونت ثابت با ویژگی supportedAxes
اضافی است. ویژگی supportedAxes
لیستی از تگ های محور پشتیبانی شده جدا شده با کاما است. با اندروید 15 فقط می توان محور wght
و ital
را مشخص کرد.
اگر ویژگی supportedAxes
مشخص نشده باشد، گره font
به عنوان یک فونت ثابت از یک نمونه واحد از یک فونت متغیر مشخص شده با فرزندان axis
کار می کند.
اگر ویژگی supportedAxes
مشخص شده باشد، سیستم به صورت پویا یک نمونه فونت برای وزن و مقدار سبک داده شده در زمان اجرا ایجاد می کند.
توسعه دهندگان می توانند از android.graphics.fonts.SystemFonts#getAvailableFonts
Java API یا ASystemFontIterator_open
NDK API برای دریافت لیستی از فایل های فونت نصب شده در سیستم استفاده کنند. برای کسب اطلاعات در مورد APIهای برنامهنویسی که از این بهروزرسانی پشتیبانی میکنند، API قلم متغیر OpenType و buildVariableFamily
را ببینید.
سفارشی کردن فونت ها
برخی OEM ها فایل های فونت را در AOSP نصب یا جایگزین می کنند تا مارک های خود را نشان دهند. اندروید 12 از این قابلیت پشتیبانی می کند، اما الزاماتی را برای به روز نگه داشتن فونت های ایموجی در دستگاه ها اضافه می کند. OEM هایی که فایل های فونت ایموجی را اصلاح یا به روز نمی کنند، نیازی به استفاده از این ویژگی ندارند.
Google فایلهای فونت، بهویژه فایلهای NotoColorEmoji
را از طریق GMS Core بهروزرسانی میکند، بنابراین فایل NotoColorEmoji.ttf
را از پارتیشن /system
تغییر یا حذف نکنید و آن را از /frameworks/base/data/fonts/fonts.xml
. به سه روش زیر توجه کنید که می توانید فونت های خود را سفارشی کنید :
- فایل
NotoColorEmoji.ttf
را با یک فونت emoji با مارک OEM جایگزین کنید. - فایل
NotoColorEmoji.ttf
را برای نیازهای بازار محلی خود تغییر دهید. - فایل های فونت دیگر را جایگزین یا تغییر دهید.
اگر فونت های ایموجی را در AOSP تغییر نمی دهید، نیازی به اقدام ندارید. اگر میخواهید فونتهای ایموجی را سفارشی کنید، از دستورالعملهای بخشهای زیر استفاده کنید.
فونت های ایموجی با مارک OEM را جایگزین NotoColorEmoji.ttf کنید
برای جایگزینی فایل NotoColorEmoji.ttf
با فایل فونتهای emoji با مارک OEM، فونت emoji را درست قبل از زنجیره فونت قرار دهید:
- فونت خود را به نام
OEMCustomEmoji.ttf
در پارتیشن/system
قرار دهید. /frameworks/base/data/fonts/fonts.xml
(و/frameworks/base/data/fonts/font-fallback.xml
در اندروید 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 را برای نیازهای بازار محلی تغییر دهید
این مراحل را برای سفارشی کردن نیازهای بازار محلی خود دنبال کنید:
- فایل
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
برمیگرداند.
فایل های فونت دیگر را جایگزین یا تغییر دهید
برای جایگزینی یا تغییر فونتهای دیگر، سفارشیسازی شبیه به تغییر فایلهای TTF برای نیازهای بازار محلی است. فایل های فونت ناشناخته ای که در زمان اجرا در AOSP به روز می شوند نادیده گرفته می شوند و به روز نمی شوند. گوگل فونت های ناشناخته را در دستگاه شما نادیده می گیرد. این شامل فایلهای فونتی میشود که از فونتهای اصلی در AOSP اصلاح شدهاند.
اگرچه به روز رسانی فونت توسط گوگل در GMS Core انجام می شود، مکانیسم عمومی به روز رسانی فونت برای همه OEM ها باز است. OEM ها می توانند با استفاده از مراحل پیش نیازهای جلسه ، امضای فایل های فونت و ایجاد به روز رسانی فونت زمان اجرا، به روز رسانی فونت های اضافی را نصب کنند.
پیش نیازها را برآورده کنید
مکانیسم به روز رسانی فونت از ویژگی هسته لینوکس fs-verity
استفاده می کند. بررسی کنید که دستگاه شما با fs-verity
سازگار است و گواهی را در دستگاه خود قرار دهید.
فایل های فونت را امضا کنید
از آنجایی که فایل های فونت منابع خطرناکی هستند، باید با کلیدهای قابل اعتماد تأیید شوند. همه فایل های فونتی که قرار است به روز شوند را به دقت بررسی کنید و با کلید خصوصی خود امضا کنید. امضا باید با fs-verity
سازگار باشد.
به روز رسانی فونت زمان اجرا را انجام دهید
برنامه سیستم FontManager
به روز رسانی فونت را انجام می دهد. برنامه FontManager
آخرین وضعیت فونت سیستم نصب شده و توانایی به روز رسانی فایل های فونت با امضا را فراهم می کند. برای فراخوانی برنامههای بهروزرسانی، UPDATE_FONT signature|privileged
به فهرست مجاز برنامهها و به مانیفست خود اضافه کنید.
UPDATE_FONT signature|privileged
را برای عملکرد بهروزرسانی برنامه خود ارائه دهید.
با شروع اندروید 15، فونت های متغیر در زمان اجرا با کارایی و جزئیات بهتر رندر می شوند. با این بهروزرسانی، فروشندگان باید تنظیمات فونت متغیر جدیدی را به جای fonts.xml
به font_fallback.xml
اضافه کنند، زیرا fonts.xml
در حال منسوخ شدن است. برای اطلاعات بیشتر به پشتیبانی از فونت های متغیر مراجعه کنید.
در 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
ارسال می کند. سپس تنظیمات فونت را برای استفاده در فرآیند برنامه تنظیم می کند.
پشتیبانی از فونت های متغیر
با شروع در Android 15، تنظیمات فونت متغیر در font_fallback.xml
با استفاده از قالب زیر مشخص میشوند:
<family lang="und-Ethi" supportedAxes="wght,ital">
<font>NotoSansEthiopic-VF.ttf</font>
</family>
در این قالب، یک فونت متغیر دارای تمام ویژگیهای یک فونت ثابت با ویژگی supportedAxes
اضافی است. ویژگی supportedAxes
لیستی از تگ های محور پشتیبانی شده جدا شده با کاما است. با اندروید 15 فقط می توان محور wght
و ital
را مشخص کرد.
If the supportedAxes
attribute isn't specified, the font
node works as a static font of a single instance of a variable font specified with axis
children.
If the supportedAxes
attribute is specified, the system dynamically creates a font instance for the given weight and style value at runtime.
توسعه دهندگان می توانند از android.graphics.fonts.SystemFonts#getAvailableFonts
java aspi یا ASystemFontIterator_open
ndk api استفاده کنند تا لیستی از پرونده های فونت نصب شده را دریافت کنند. برای کسب اطلاعات در مورد APIهای برنامهنویسی که از این بهروزرسانی پشتیبانی میکنند، API قلم متغیر OpenType و buildVariableFamily
را ببینید.
سفارشی کردن فونت ها
برخی OEM ها فایل های فونت را در AOSP نصب یا جایگزین می کنند تا مارک های خود را نشان دهند. اندروید 12 از این قابلیت پشتیبانی می کند، اما الزاماتی را برای به روز نگه داشتن فونت های ایموجی در دستگاه ها اضافه می کند. OEM هایی که فایل های فونت ایموجی را اصلاح یا به روز نمی کنند، نیازی به استفاده از این ویژگی ندارند.
Google فایلهای فونت، بهویژه فایلهای NotoColorEmoji
را از طریق GMS Core بهروزرسانی میکند، بنابراین فایل NotoColorEmoji.ttf
را از پارتیشن /system
تغییر یا حذف نکنید و آن را از /frameworks/base/data/fonts/fonts.xml
. به سه روش زیر توجه کنید که می توانید فونت های خود را سفارشی کنید :
- فایل
NotoColorEmoji.ttf
را با یک فونت emoji با مارک OEM جایگزین کنید. - فایل
NotoColorEmoji.ttf
را برای نیازهای بازار محلی خود تغییر دهید. - فایل های فونت دیگر را جایگزین یا تغییر دهید.
اگر فونت های ایموجی را در AOSP تغییر نمی دهید، نیازی به اقدام ندارید. اگر میخواهید فونتهای ایموجی را سفارشی کنید، از دستورالعملهای بخشهای زیر استفاده کنید.
فونت های ایموجی با مارک OEM را جایگزین NotoColorEmoji.ttf کنید
برای جایگزینی فایل NotoColorEmoji.ttf
با فایل فونتهای emoji با مارک OEM، فونت emoji را درست قبل از زنجیره فونت قرار دهید:
- فونت خود را به نام
OEMCustomEmoji.ttf
در پارتیشن/system
قرار دهید. /frameworks/base/data/fonts/fonts.xml
(و/frameworks/base/data/fonts/font-fallback.xml
در اندروید 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 را برای نیازهای بازار محلی تغییر دهید
این مراحل را برای سفارشی کردن نیازهای بازار محلی خود دنبال کنید:
- فایل
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
برمیگرداند.
فایل های فونت دیگر را جایگزین یا تغییر دهید
برای جایگزینی یا تغییر فونتهای دیگر، سفارشیسازی شبیه به تغییر فایلهای TTF برای نیازهای بازار محلی است. فایل های فونت ناشناخته ای که در زمان اجرا در AOSP به روز می شوند نادیده گرفته می شوند و به روز نمی شوند. گوگل فونت های ناشناخته را در دستگاه شما نادیده می گیرد. این شامل فایلهای فونتی میشود که از فونتهای اصلی در AOSP اصلاح شدهاند.
اگرچه به روز رسانی فونت توسط گوگل در GMS Core انجام می شود، مکانیسم عمومی به روز رسانی فونت برای همه OEM ها باز است. OEM ها می توانند با استفاده از مراحل پیش نیازهای جلسه ، امضای فایل های فونت و ایجاد به روز رسانی فونت زمان اجرا، به روز رسانی فونت های اضافی را نصب کنند.
پیش نیازها را برآورده کنید
مکانیسم به روز رسانی فونت از ویژگی هسته لینوکس fs-verity
استفاده می کند. بررسی کنید که دستگاه شما با fs-verity
سازگار است و گواهی را در دستگاه خود قرار دهید.
فایل های فونت را امضا کنید
از آنجایی که فایل های فونت منابع خطرناکی هستند، باید با کلیدهای قابل اعتماد تأیید شوند. همه فایل های فونتی که قرار است به روز شوند را به دقت بررسی کنید و با کلید خصوصی خود امضا کنید. امضا باید با fs-verity
سازگار باشد.
به روز رسانی فونت زمان اجرا را انجام دهید
برنامه سیستم FontManager
به روز رسانی فونت را انجام می دهد. برنامه FontManager
آخرین وضعیت فونت سیستم نصب شده و توانایی به روز رسانی فایل های فونت با امضا را فراهم می کند. برای فراخوانی برنامههای بهروزرسانی، UPDATE_FONT signature|privileged
به فهرست مجاز برنامهها و به مانیفست خود اضافه کنید.
UPDATE_FONT signature|privileged
را برای عملکرد بهروزرسانی برنامه خود ارائه دهید.