פיתוח מניפסט של מכשיר

כשמפתחים ומפיצים מכשירים חדשים, היצרנים יכולים להגדיר ולציין את גרסת היעד של FCM במניפסט המכשיר (DM). כשמשדרגים את קובץ האימג' של הספק למכשירים ישנים, הספקים יכולים להחליט להטמיע גרסאות HAL חדשות ולהגדיל את גרסת היעד של FCM.

פיתוח מכשירים חדשים

כשמגדירים את גרסת היעד של FCM במכשירים חדשים:

  1. משאירים את DEVICE_MANIFEST_FILE ו-PRODUCT_ENFORCE_VINTF_MANIFEST לא מוגדרים.
  2. מטמיעים HALs לגרסה היעד של FCM.
  3. כותבים את קובץ המניפסט הנכון של המכשיר.
  4. כותבים את גרסת היעד של FCM בקובץ המניפסט של המכשיר.
  5. מגדירים את DEVICE_MANIFEST_FILE.
  6. מגדירים את PRODUCT_ENFORCE_VINTF_MANIFEST לערך true.

השקת מכשירים חדשים

כשמכשיר חדש יוצא לשוק, צריך לקבוע את גרסת היעד הראשונית של FCM ולהצהיר עליה במניפסט של המכשיר כמאפיין target-level ברכיב <manifest> ברמה העליונה.

לדוגמה, במכשירים שמופעלים עם Android מגרסה 9, גרסת היעד של FCM צריכה להיות 3 (הגרסת היעד העדכנית ביותר כרגע). כדי להצהיר על כך במניפסט של המכשיר:

<manifest version="1.0" type="device" target-level="3">
    <!-- ... -->
</manifest>

שדרוג של קובץ האימג' של הספק

כשמשדרגים את קובץ האימג' של הספק במכשיר ישן, הספקים יכולים להחליט אם להטמיע גרסאות HAL חדשות ולהגדיל את גרסת היעד של FCM.

שדרוג HALs

במהלך שדרוג של קובץ אימג' של ספק, הספקים יכולים להטמיע גרסאות HAL חדשות, בתנאי ששם ה-HAL, שם הממשק ושם המכונה זהים. לדוגמה:

  • מכשירי Google Pixel 2 ו-Pixel 2 XL שפורסמו עם גרסת היעד 2 של FCM, שבה הופעלה HAL 2.0 הנדרשת של האודיוandroid.hardware.audio@2.0::IDeviceFactory/default.
  • ב-HAL 4.0 של אודיו, שפורסם עם Android 9, אפשר להשתמש ב-OTA מלא במכשירי Google Pixel 2 ו-Pixel 2 XL כדי לשדרג ל-HAL 4.0, שמטמיע את android.hardware.audio@4.0::IDeviceFactory/default.
  • למרות ש-compatibility_matrix.2.xml מציין רק את audio 2.0, הדרישה לתמונת ספק עם יעד של FCM בגרסה 2 הופחתה כי מסגרת Android 9 (FCM בגרסה 3) מתייחסת ל-audio 4.0 כתחליף ל-HAL של audio 2.0 מבחינת הפונקציונליות.

לסיכום, מכיוון ש-compatibility_matrix.2.xml מחייב אודיו 2.0 ו-compatibility_matrix.3.xml מחייב אודיו 4.0, הדרישות הן:

גרסת FCM (מערכת) גרסת היעד של FCM (ספק) דרישות
2 (8.1) 2 (8.1) Audio 2.0
3 (9) 2 (8.1) אודיו 2.0 או 4.0
3 (9) 3 (9) Audio 4.0

שדרוג גרסת היעד של FCM

במהלך שדרוג של קובץ אימג' של ספק, הספקים יכולים גם להגדיל את גרסת היעד של FCM כדי לציין את גרסת היעד של FCM שבה קובץ האימג' המשופר של הספק יכול לפעול. כדי לשדרג את גרסת היעד של FCM במכשיר, הספקים צריכים:

  1. מטמיעים את כל הגרסאות החדשות הנדרשות של HAL עבור גרסת היעד של FCM.
  2. משנים את הגרסאות של HAL בקובץ המניפסט של המכשיר.
  3. משנים את גרסת היעד של FCM בקובץ המניפסט של המכשיר.
  4. מסירים גרסאות HAL שהוצאו משימוש.

לדוגמה, מכשירי Google Pixel ו-Pixel XL הושקו עם Android 7.0, ולכן גרסת היעד של FCM צריכה להיות לפחות מהדור קודם. עם זאת, מניפסט המכשיר מצהיר על גרסת היעד של FCM 2 כי קובץ האימג' של הספק עודכן בהתאם ל-compatibility_matrix.2.xml:

<manifest version="1.0" type="device" target-level="2">

אם הספקים לא יטמיעו את כל הגרסאות החדשות הנדרשות של HAL או לא יסירו גרסאות HAL שהוצאו משימוש, לא ניתן יהיה לשדרג את גרסת היעד של FCM.

לדוגמה, במכשירי Google Pixel 2 ו-Pixel 2 XL היעד הוא גרסה 2 של FCM. הן מטמיעות חלק מ-HALs הנדרשים על ידי compatibility_matrix.3.xml (כמו אודיו 4.0, בריאות 2.0 וכו'), אבל הן לא מסירות את android.hardware.radio.deprecated@1.0, שהוצא משימוש בגרסה 3 של FCM (Android 9). לכן, אי אפשר לשדרג את גרסת היעד של FCM במכשירים האלה לגרסה 3.

איך מגדירים דרישות לליבת המערכת במהלך עדכון OTA

עדכון מכשירי Android מגרסה 9 ומטה

במכשירים עם Android 9 ומטה, חשוב לוודא שה-CLs הבאים נבחרו בקפידה:

השינויים האלה כוללים את דגל ה-build PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS, והדגל לא מוגדר במכשירים שהושקו עם Android מגרסה 9 ומטה.

  • כשמעדכנים ל-Android 10, לקוחות OTA במכשירים עם Android 9 וגרסאות ישנות יותר לא בודקים בצורה נכונה את דרישות הליבה בחבילת ה-OTA. השינויים האלה נדרשים כדי להסיר את דרישות הליבה מחבילת ה-OTA שנוצרה.
  • כשמעדכנים ל-Android 11, אפשר להגדיר את דגל ה-build‏ PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS כדי לבדוק את התאימות ל-VINTF בזמן היצירה של חבילת העדכון.

מידע נוסף על הדגל הזה של ה-build זמין במאמר עדכון מכשירים מ-Android 10.

עדכון מכשירים מ-Android 10

ב-Android 10 מופיע דגל build חדש,‏ PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS. במכשירים שהושקו עם Android 10, הדגל הזה מוגדר באופן אוטומטי ל-true. כשהדגל מוגדר ל-true, סקריפט מחלץ את גרסת הליבה ואת הגדרות הליבה מקובץ האימג' של הליבה שהותקן.

  • כשמתעדכנים ל-Android 10, חבילת העדכון ב-OTA מכילה את הגרסה וההגדרה של הליבה. לקוחות OTA במכשירים עם Android מגרסה 10 קוראים את המידע הזה כדי לבדוק את התאימות.
  • כשמעדכנים ל-Android 11, המערכת קוראת את הגרסה וההגדרות של הליבה כדי לבדוק את התאימות.

אם הסקריפט לא מצליח לחלץ את המידע הזה מקובץ האימג' של הליבה, מבצעים אחת מהפעולות הבאות:

  • עורכים את הסקריפט כך שיתמוך בפורמט הליבה שלכם ומשתתפים ב-AOSP.
  • מגדירים את BOARD_KERNEL_VERSION לגרסה של הליבה ואת BOARD_KERNEL_CONFIG_FILE לנתיב של קובץ התצורה של הליבה שנוצר .config. צריך לעדכן את שני המשתנים כשמתעדכנת קובץ האימג' של הליבה.
  • לחלופין, אפשר להגדיר את PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS לערך false כדי לדלג על בדיקת הדרישות של הליבה. לא מומלץ לעשות זאת כי אי-תאימות כלשהי מוסתרת ומתגלה רק כשמריצים בדיקות VTS אחרי העדכון.

אפשר להציג את קוד המקור של הסקריפט לחילוץ מידע מהליבה extract_kernel.py.