החל מ-Android 15, גופנים של משתנים עוברים עיבוד בזמן הריצה בצורה יעילה יותר ורמת פירוט גבוהה יותר. במסגרת העדכון הזה, הספקים צריכים להוסיף הגדרות חדשות של גופנים משתנים ל-font_fallback.xml
במקום ל-fonts.xml
, כי fonts.xml
אנחנו מוציאים משימוש.
מידע נוסף זמין במאמר תמיכה בגופנים משתנים.
ב-Android 11 ובגרסאות ישנות יותר, כדי לעדכן את קובצי הגופן שמותקנים במכשיר ב-AOSP (במחיצה /system/fonts
) או במחיצות של הספק (במחיצות /product/fonts
או /system/fonts
), נדרש עדכון מערכת מה-OEM. הדרישה הזו משפיעה באופן משמעותי על תאימות האמוג'י. ב-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 כדי לקבל רשימה של קובצי גופנים שהותקנו על ידי המערכת. מידע על ממשקי API למפתחים שתומכים בעדכון הזה זמין במאמרים Improved OpenType Variable Font API ו-buildVariableFamily
.
התאמה אישית של גופנים
חלק מיצרני ה-OEM מתקינים או מחליפים קובצי גופנים ב-AOSP כדי להציג את המותגים שלהם. מערכת Android 12 תומכת בפונקציה הזו, אבל מוסיפים לה דרישות כדי לוודא שגופנים של אמוג'י יהיו מעודכנים במכשירים. יצרני ציוד מקורי שלא משנים או מעדכנים קבצים של גופן אמוג'י, לא צריכים להשתמש בתכונה הזו.
Google מעדכנת את קובצי הגופנים, במיוחד את קובצי NotoColorEmoji
דרך GMS Core, לכן אסור לשנות או להסיר את הקובץ NotoColorEmoji.ttf
מהמחיצה /system
, ואסור להסיר אותו מ-/frameworks/base/data/fonts/fonts.xml
.
שימו לב לשלוש הדרכים הבאות שבאמצעותן ניתן להתאים אישית את הגופנים:
- מחליפים את הקובץ
NotoColorEmoji.ttf
בגופן אמוג'י של ה-OEM (יצרן הציוד המקורי). - משנים את הקובץ
NotoColorEmoji.ttf
בהתאם לצרכים של השוק המקומי. - החלפה או שינוי של קובצי גופנים אחרים.
אם לא משנים את הגופן של האמוג'י ב-AOSP, אין צורך לעשות כלום. כדי להתאים אישית את הגופנים של האמוג'י, יש לפעול לפי ההוראות שבקטעים הבאים.
החלפת NotoColorEmoji.ttf בגופנים של אמוג'י ממותגים של יצרן ציוד מקורי
כדי להחליף את הקובץ NotoColorEmoji.ttf
בקובץ של גופני האמוג'י שלכם עם המותג של היצרן, צריך להוסיף את קובץ הגופנים של האמוג'י לפני שרשרת חלופות הגופנים:
- מעבירים את הגופן שלכם, שנקרא
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, מנגנון העדכון הכללי של הגופנים פתוח לכל יצרני ה-OEM. יצרני ציוד מקורי יכולים להתקין עוד כלים לעדכון גופנים לפי השלבים שמפורטים במאמר דרישות קדם עמידה בדרישות, חתימה על קובצי גופנים ועדכון גופנים בסביבת זמן ריצה.
עמידה בדרישות מוקדמות
מנגנון עדכון הגופנים משתמש בתכונה fs-verity
של ליבה Linux. מוודאים שהמכשיר תואם ל-fs-verity
וכוללים את האישור במכשיר.
חתימה על קובצי גופנים
קובצי גופנים הם משאבים מסוכנים, ולכן צריך לאמת אותם באמצעות מפתחות מהימנים.
בודקים היטב את כל קובצי הגופנים שרוצים לעדכן, ומחתימים עליהם באמצעות המפתח הפרטי. החתימה חייבת להיות תואמת ל-fs-verity
.
עדכון גופנים בסביבת זמן הריצה
אפליקציית המערכת FontManager
מבצעת עדכוני גופנים. אפליקציית FontManager
מספקת את הסטטוס העדכני ביותר של גופן המערכת, ואת האפשרות לעדכן קובצי גופנים בחתימות. כדי לקרוא לעדכון אפליקציות, צריך להוסיף את ההרשאה UPDATE_FONT signature|privileged
לרשימת ההיתרים של האפליקציות, וגם למניפסט.
נותנים לפונקציית העדכון של האפליקציה את ההרשאה UPDATE_FONT signature|privileged
.