החל מ-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
, היא מעבירה את הגדרות הגופן של המערכת כארגומנטים של ה-method 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
children.
אם מציינים את המאפיין supportedAxes
, המערכת יוצרת באופן דינמי מופע של גופן עבור הערך של המשקל והסגנון שצוינו בזמן הריצה.
מפתחים יכולים להשתמש ב-android.graphics.fonts.SystemFonts#getAvailableFonts
Java API או ב-ASystemFontIterator_open
NDK API כדי לקבל רשימה של קובצי גופנים שהותקנו במערכת. מידע על ממשקי API למפתחים שתומכים בעדכון הזה זמין במאמרים Improved OpenType Variable Font API ו-buildVariableFamily
.
התאמה אישית של גופנים
יצרני ציוד מקורי מסוימים מתקינים או מחליפים קובצי גופנים ב-AOSP כדי להציג את המותגים שלהם. Android 12 תומך בפונקציונליות הזו, אבל נוספו דרישות כדי לשמור על עדכון של גופני האימוג'י במכשירים. יצרני ציוד מקורי שלא משנים או מעדכנים קובצי גופן של אמוג'י לא צריכים להשתמש בתכונה הזו.
Google מעדכנת את קובצי הגופן, במיוחד את קובצי NotoColorEmoji
דרך GMS Core, לכן אל תשנו או תסירו את קובץ NotoColorEmoji.ttf
ממחיצת /system
, ואל תסירו אותו מ-/frameworks/base/data/fonts/fonts.xml
.
שימו לב לשלוש הדרכים שבהן אפשר להתאים אישית את הגופנים:
- מחליפים את הקובץ
NotoColorEmoji.ttf
בגופן אמוג'י עם מיתוג של יצרן ציוד מקורי (OEM). - משנים את קובץ
NotoColorEmoji.ttf
בהתאם לצרכים של השוק המקומי. - להחליף או לשנות קובצי גופן אחרים.
אם אתם לא משנים את הגופנים של האמוג'י ב-AOSP, אתם לא צריכים לעשות שום דבר. אם רוצים להתאים אישית את הגופנים של סמלי האמוג'י, אפשר לפעול לפי ההוראות שבקטעים הבאים.
החלפת NotoColorEmoji.ttf בגופני אמוג'י עם מיתוג OEM
כדי להחליף את הקובץ NotoColorEmoji.ttf
בקובץ של גופני אמוג'י עם מיתוג של יצרן ציוד מקורי (OEM), צריך להוסיף את גופן האמוג'י ממש לפני שרשרת הגיבוי של הגופנים:
- ממקמים את הגופן שלכם, שנקרא
OEMCustomEmoji.ttf
, במחיצה/system
. משנים את
/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 בהתאם לצרכים של השוק המקומי
כדי להתאים אישית את ההגדרות בהתאם לצרכים של השוק המקומי:
- יוצרים קובץ
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"
)
יצירת גליף טופו: אפשר לציין במפורש מזהה של גליף טופו אם רוצים להשתמש בו. כשמציינים את הערך glyphID = 0
, האפליקציה הרלוונטית מפרשת אותו כ'הגליף לא זמין'. לדוגמה, כשמשתמשים במאפיין הזה, האפליקציה Paint#hasGlyph
מחזירה את הערך false
.
החלפה או שינוי של קובצי גופן אחרים
כדי להחליף או לשנות גופנים אחרים, תהליך ההתאמה האישית דומה לשינוי קובצי TTF בהתאם לצרכים של השוק המקומי. המערכת מתעלמת מקבצי גופנים לא ידועים שעודכנו ב-AOSP בזמן הריצה, והם לא מתעדכנים. Google מתעלמת מגופנים לא מוכרים במכשיר. זה כולל קובצי גופנים ששונו מהגופנים המקוריים ב-AOSP.
למרות ש-Google מבצעת עדכוני גופנים ב-GMS Core, מנגנון עדכון הגופנים הכללי פתוח לכל יצרני הציוד המקורי. יצרני ציוד מקורי יכולים להתקין עדכוני גופנים נוספים באמצעות השלבים שמפורטים במאמרים דרישות מוקדמות, חתימה על קובצי גופנים וביצוע עדכוני גופנים בזמן ריצה.
עמידה בדרישות המוקדמות
מנגנון עדכון הגופנים משתמש בתכונה של ליבת Linux fs-verity
. מוודאים שהמכשיר fs-verity
תואם וכוללים את האישור במכשיר.
חתימה על קובצי גופנים
מכיוון שקבצי גופנים הם משאבים מסוכנים, צריך לאמת אותם באמצעות מפתחות מהימנים.
בודקים בקפידה את כל קובצי הגופנים שרוצים לעדכן, וחותמים באמצעות המפתח הפרטי. החתימה צריכה להיות תואמת.fs-verity
ביצוע עדכונים של גופנים בזמן ריצה
אפליקציית המערכת FontManager
מבצעת עדכוני גופנים. אפליקציית FontManager
מספקת את הסטטוס העדכני של גופן המערכת שהותקן, ומאפשרת לעדכן קובצי גופן עם חתימות. כדי להפעיל את הפונקציה update apps, צריך להוסיף את ההרשאה UPDATE_FONT signature|privileged
לרשימת ההיתרים של האפליקציות ולמניפסט.
צריך לספק את ההרשאה UPDATE_FONT signature|privileged
לפונקציית העדכון של האפליקציה.