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

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

שדרוג HAL

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

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

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

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

במכשירים עם Android 9 ומטה, מוודאים שבוצע cherry-pick של רשימות השינויים הבאות:

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

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

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

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

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

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