החל מ-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 פועל כגופן סטטי של מופע יחיד של גופן משתנה שצוין באמצעות axischildren.
אם מציינים את המאפיין supportedAxes, המערכת יוצרת באופן דינמי מופע של גופן עבור ערך המשקל והסגנון שצוין בזמן הריצה.
מפתחים יכולים להשתמש ב-Java API android.graphics.fonts.SystemFonts#getAvailableFonts או ב-NDK API ASystemFontIterator_open כדי לקבל רשימה של קובצי גופנים שהותקנו במערכת. מידע על ממשקי 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 (יצרן ציוד מקורי), צריך להוסיף את גופן האמוג'י ממש לפני שרשרת הגיבוי (fallback chain) של הגופן:
- ממקמים את הגופן שלכם, שנקרא
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 לפונקציית העדכון של האפליקציה.