הטמעת גופנים מותאמים אישית

החל מ-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, המערכת יוצרת באופן דינמי מופע font של ערך המשקל והסגנון הנתונים בזמן ריצה.

מפתחים יכולים להשתמש ב-android.graphics.fonts.SystemFonts#getAvailableFonts Java API או ASystemFontIterator_open NDK API כדי לקבל רשימה של קובצי גופנים שהותקנו על ידי המערכת. לקבלת מידע על בממשקי API למפתחים שתומכים בעדכון הזה: API משופר של OpenType Variable Font ו-buildVariableFamily.

התאמה אישית של הגופנים

חלק מיצרני ה-OEM מתקינים או מחליפים קובצי גופנים ב-AOSP כדי להציג את המותגים שלהם. מערכת Android 12 תומכת בפונקציונליות הזו, אבל מוסיפה דרישות כדי לעדכן את הגופן של האמוג'י במכשירים. יצרני ציוד מקורי שלא מבצעים שינויים או כדי לעדכן את קובצי הגופן של האמוג'י, אין צורך להשתמש בתכונה הזו.

Google מעדכנת את קובצי הגופנים, במיוחד את קובצי NotoColorEmoji באמצעות GMS חשוב לא לשנות או להסיר את הקובץ NotoColorEmoji.ttf המחיצה /system, ואין להסיר אותה ממנה /frameworks/base/data/fonts/fonts.xml שימו לב לשלוש הדרכים הבאות שבאמצעותן ניתן להתאים אישית את הגופנים:

  1. מחליפים את הקובץ NotoColorEmoji.ttf בגופן אמוג'י של ה-OEM (יצרן הציוד המקורי).
  2. עליכם לשנות את הקובץ NotoColorEmoji.ttf בהתאם לצורכי השוק המקומי שלכם.
  3. החלפה או שינוי של קובצי גופנים אחרים.

אם לא משנים את הגופן של האמוג'י ב-AOSP, אין צורך לעשות כלום. אם המיקום ברצונך להתאים אישית את הגופן של האמוג'י, צריך לפעול לפי ההוראות הבאות .

מחליפים את NotoColorEmoji.ttf בגופני אמוג'י ממותגי ה-OEM

כדי להחליף את הקובץ NotoColorEmoji.ttf בקובץ גופנים עם מיתוג של ה-OEM (יצרן הציוד המקורי): מציבים את גופן האמוג'י ממש לפני שרשרת החלופות של הגופנים:

  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 המקורי.

לאחר ביצוע שלב 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. יצרני ציוד מקורי יכולים להתקין עדכוני גופנים נוספים באמצעות השלבים שמפורטים בקטע דרישות מוקדמות לפגישה, חתימה על קובצי גופן, וביצוע עדכונים לגופנים בסביבת זמן ריצה.

עמידה בדרישות מוקדמות

מנגנון עדכון הגופנים משתמש בתכונת הליבה של Linux fs-verity. מוודאים ש- המכשיר שלך תואם ל-fs-verity וכולל את האישור במכשיר.

חתימה על קובצי גופנים

מאחר שקובצי גופנים הם משאבים מסוכנים, צריך לאמת אותם באמצעות מפתחות מהימנים. בודקים בקפידה את כל קובצי הגופנים שאמורים לעדכן, וחותמים באמצעות מפתח פרטי. החתימה חייבת להיות תואמת ל-fs-verity.

ביצוע עדכונים לגבי הגופנים בסביבת זמן הריצה

אפליקציית המערכת FontManager מבצעת עדכוני גופנים. האפליקציה FontManager מספק את הסטטוס העדכני ביותר של גופן המערכת המותקן ואפשרות לעדכן את הגופן. קבצים עם חתימות. כדי להתקשר לעדכון אפליקציות, צריך להוסיף את הרשאת UPDATE_FONT signature|privileged ל רשימת היתרים של אפליקציות, וגם במניפסט.

עליך לספק את ההרשאה UPDATE_FONT signature|privileged למעדכן של האפליקציה מותאמת אישית.