במהדורה של Android Framework יש כמה מטריצות תאימות של Framework (FCM), אחת לכל גרסת FCM שאפשר לשדרג אליה. המטריצות האלה מגדירות את מה שה-Framework יכול להשתמש בו ואת הדרישות של גרסת ה-FCM לטירגוט. כחלק ממחזור החיים של FCM, מערכת Android מוציאה משימוש ומסירה את HIDL HALs, ואז משנה את קובצי ה-FCM כדי לשקף את הסטטוס של גרסת ה-HAL.
כדי להפעיל עדכוני OTA שמבוססים על framework בלבד במערכות אקולוגיות משלהם, שותפים שמרחיבים ממשקי ספקים צריכים גם להוציא משימוש ולהסיר HIDL HALs באמצעות אותן שיטות.
טרמינולוגיה
- מטריצת התאימות של Framework (FCM)
- קובץ XML שמפרט את דרישות המסגרת לגבי הטמעות של ספקים שעומדים בדרישות. מטריצת התאימות היא בעלת גרסאות, וגרסה חדשה מוקפאת לכל מהדורת מסגרת. כל מהדורה של מסגרת מכילה כמה FCMs.
- גרסאות של פלטפורמת FCM (SF)
- קבוצת כל הגרסאות של FCM במהדורה של מסגרת. המסגרת יכולה לפעול עם כל הטמעה של ספק שעומדת באחת מהדרישות האלה של FCM.
- גרסת FCM (F)
- הגרסה הכי גבוהה מבין כל ה-FCM בגרסת פריים.
- גרסת היעד של FCM (V)
- גרסת ה-FCM שמיועדת (מ-SF), שמוצהרת באופן מפורש במניפסט המכשיר, שהטמעה של ספק עומדת בה. הטמעה של ספק צריכה להיווצר בהתאם ל-FCM שפורסם, למרות שהיא יכולה להצהיר על גרסאות חדשות יותר של HAL במניפסט המכשיר שלה.
- גרסת HAL
- גרסת HAL היא בפורמט
[email protected]
, כאשרfoo
הוא שם ה-HAL ו-x.y
היא הגרסה הספציפית. לדוגמה:[email protected]
,[email protected]
(הקידומת הבסיסית, למשלandroid.hardware
, מושמטת לאורך המסמך הזה). - מניפסט המכשיר
- קובצי XML שמציינים אילו גרסאות HAL מסופקות בצד המכשיר של ממשק הספק, כולל תמונות הספק ו-ODM. התוכן של מניפסט המכשיר מוגבל על ידי גרסת ה-FCM של המכשיר, אבל יכול לכלול רשימה של HALs שהם חדשים יותר ביחס ל-FC שמתאים ל-V.
- שכבות HAL של מכשירים
- ספריות HAL שמופיעות (מסופקות) במניפסט המכשיר ומופיעות במטריצת התאימות של המסגרת (FCM).
- מטריצת תאימות מכשירים (DCM)
- קובץ XML שמפרט את הדרישות של הספק לגבי הטמעות של מסגרות תואמות. כל מכשיר מכיל DCM אחד.
- Framework Manifest
- קובץ XML שמציין אילו גרסאות HAL מספק הצד של המסגרת של ממשק הספק, כולל תמונות של מערכת, system_ext ומוצר. HALs במניפסט של framework מושבתים באופן דינמי בהתאם לגרסת היעד של FCM במכשיר.
- Framework HALs
- HALs שמופיעים כ-HALs שסופקו במניפסט של המסגרת ומופיעים במטריצת התאימות של המכשיר (DCM).
מחזור החיים של FCM ב-codebase
במסמך הזה מתואר מחזור החיים של FCM באופן כללי. כדי לראות את המניפסטים הנתמכים, אפשר לעיין במאמר hardware/interfaces/compatibility_matrices/compatibility_matrix.<FCM>.xml
system/libvintf/include/vintf/Level.h
שבו מוסבר איפה אפשר למצוא את FCM.
מכשיר שמופצת בו גרסת Android תואמת אמור לקבל ערך FCM שגדול מהרמה המקבילה או שווה לה. לדוגמה, מכשיר שנשלח עם Android 11 בדרך כלל יכלול FCM ברמה 5, אבל יטמיע FCM ברמה 6 ומעלה, שכולל דרישות נוספות שונות שמפורטות במטריצות התאימות. הרמות הנתמכות ב-Android 15 הן:
FCM | גרסת Android |
---|---|
5 | Android 11/R |
6 | Android 12/S |
7 | Android 13/T |
8 | Android 14/U |
202404 | Android 15/V |
רמת ה-FCM שווה לרמת Vendor API או חדשה ממנה.
כש-Android מוציא משימוש רמה של FCM, היא עדיין נתמכת במכשירים קיימים. למכשירים שמכוונים לרמות נמוכות יותר של FCM מותר באופן מרומז להשתמש ב-HAL שמפורטים ברמות חדשות יותר של FCM, כל עוד הם זמינים בענף.
פיתוח בגרסה חדשה של FCM
מערכת Android מגדילה את מספר הגרסה של FCM בכל מהדורה של מסגרת (כמו Android 8 ו-8.1). במהלך הפיתוח, נוצר compatibility_matrix.F.xml
חדש והמערכת לא משנה יותר את compatibility_matrix.f.xml
הקיים (כאשר f
< F
).
כדי להתחיל לפתח בגרסה חדשה של FCM F
:
- מעתיקים את
compatibility_matrix.<F-1>.xml
העדכני אלcompatibility_matrix.F.xml
. - מעדכנים את המאפיין
level
בקובץ לערךF
. - מוסיפים כללי build תואמים כדי להתקין את מטריצת התאימות הזו במכשיר.
הוספת HAL חדש
במהלך הפיתוח, כשמציגים HAL חדש (Wi-Fi, NFC וכו') ל-Android בגרסה הנוכחית של FCM F
, מוסיפים את ה-HAL ל-compatibility_matrix.F.xml
.
לדוגמה, ב-Android 8.1 נוספה [email protected]
. מכשירים עם Android בגרסה 8.1 יכולים להטמיע את HAL הזה, ולכן נוסף הערך הבא ל-compatibility_matrix.F.xml
(שנקרא באופן זמני compatibility_matrix.current.xml
במהלך הפיתוח של הגרסה הזו):
<hal format="hidl">
<name>android.hardware.cas</name>
<version>1.0</version>
<interface>
<name>IMediaCasService</name>
<instance>default</instance>
</interface>
</hal>
שדרוג HAL (משני)
גרסאות AIDL HAL נחשבות לגרסאות משניות של HAL. לגרסאות של ממשקי HIDL יש גרסאות כמו major.minor
.1.2
במהלך הפיתוח, כשמתבצע שדרוג גרסה של AIDL HAL מ-2
ל-3
בגרסה הנוכחית של FCM F
, הגרסה החדשה מתווספת לרשומה של HAL ב-compatibility_matrix.F.xml
. בשדה הגרסה של רשומה ב-HAL אפשר להזין טווחים כמו 2-3
.
לדוגמה, ב-Android FCM F
הוצג foo@3
כשדרוג של גרסה משנית של HAL. הגרסה הישנה יותר, foo@2
, משמשת למכשירים שמטרגטים גרסאות ישנות יותר של FCM, בעוד שהגרסה החדשה יותר, foo@3
, יכולה לשמש למכשירים שמטרגטים את Android FCM F
. הערך ב-FCMs ישנים יותר לפני גרסה 2
נראה כך:
<hal format="aidl">
<name>foo</name>
<version>2</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
הערך הזה הועתק אל compatibility_matrix.F.xml
ועבר שינוי כדי לתמוך בגרסה 3
באופן הבא:
<hal format="aidl">
<name>foo</name>
<version>2-3</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
שדרוג HAL (חשוב)
במהלך הפיתוח, אם יש שדרוג של גרסה ראשית ב-HAL בגרסה הנוכחית של FCM F
, הגרסה הראשית החדשה x.0
מתווספת ל-compatibility_matrix.F.xml
עם ההגדרות הבאות:
- רק גרסה
x.0
, אם מכשירים שנשלחים עםV = F
צריכים להפעיל אתx.0
. - בגרסאות ישנות יותר של ChromeOS באותו תג
<hal>
אם מכשירים שנשלחים עםV = F
יכולים להפעיל גרסה ישנה יותר של ChromeOS.
לדוגמה, בגרסה F
של FCM מוצגת גרסה [email protected]
כשדרוג של גרסה ראשית של HAL 1.0, וגרסה HAL 1.0 הוצאה משימוש. הגרסה הישנה יותר, [email protected]
, משמשת למכשירים שמטרגטים גרסאות קודמות של FCM. מכשירים שמטרגטים את גרסה F
של FCM חייבים לספק את גרסה 2.0 החדשה אם הם מספקים את HAL. בדוגמה הזו, הגרסאות הקודמות של FCM מכילות את הרשומה הזו:
<hal format="hidl">
<name>foo</name>
<version>1.0</version>;
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
מעתיקים את הרשומה הזו אל compatibility_matrix.F.xml
ומשנים אותה באופן הבא:
<hal format="hidl">
<name>foo</name>
<version>2.0</version>
<interface>
<name>IFoo</name>
<instance>default</instance>
</interface>
</hal>
הגבלות:
- ממשק HAL בגרסה 1.0 לא נמצא ב-
compatibility_matrix.F.xml
, ולכן מכשירים שמיועדים ל-FCM בגרסהF
לא יכולים לספק את ממשק HAL בגרסה 1.0 (כי ממשק HAL הזה נחשב לגרסה שיצאה משימוש). - מכיוון ש-HAL 1.0 קיים בגרסאות ישנות יותר של FCM, עדיין אפשר להשתמש ב-HAL 1.0 במסגרת, כך שהוא תואם לאחור למכשירים ישנים שמיועדים לגרסאות ישנות יותר של FCM.
גרסאות חדשות של FCM
תהליך ההפצה של גרסת FCM במחיצת המערכת מתבצע רק על ידי Google כחלק מהפצה של AOSP, והוא כולל את השלבים הבאים:
- מוודאים שלרכיב
compatibility_matrix.F.xml
יש את המאפייןlevel="F"
. - מוודאים שכל המכשירים נבנים ומאותחלים.
- מעדכנים את בדיקות VTS כדי לוודא שבמכשירים שמופעלים עם המסגרת העדכנית ביותר (על סמך רמת ה-API של המשלוח) מוגדרת גרסת FCM לטירגוט
V >= F
. - פרסום הקובץ ב-AOSP.
לדוגמה, בדיקות VTS מוודאות שבמכשירים עם Android מגרסה 9 ואילך, גרסת היעד של FCM היא >= 3.
בנוסף, יכול להיות שיהיו דרישות לגבי כל גרסה של FCM בפלטפורמות שונות ב-FCMs של המוצר ושל system_ext. הבעלים של התמונות האלה אחראי על פרסום גרסאות של FCM במחיצות של המוצר ושל system_ext. מספרי הגרסאות של FCM במחיצות product ו-system_ext צריכים להיות זהים למספרי הגרסאות במחיצה system. בדומה לגרסאות FCM במחיצת המערכת, מטריצת התאימות בגרסה F של FCM במחיצות product ו-system_ext משקפת דרישות במכשיר עם גרסת יעד F של FCM.
הוצאה משימוש של גרסת HAL
הוצאה משימוש של גרסת HAL היא החלטה של מפתח (כלומר, לגבי HALs של AOSP, Google מקבלת את ההחלטה). זה יכול לקרות כשגרסה גבוהה יותר של HAL (משנית או ראשית) יוצאת.
הוצאה משימוש של HAL במכשיר
כשממשק HAL של מכשיר מסוים, [email protected]
, מוצא משימוש בגרסה F
של FCM, המשמעות היא שכל מכשיר שמופעל עם גרסת יעד של FCM V = F
או גרסה מאוחרת יותר לא יכול להטמיע את foo
בגרסה x.y
או בכל גרסה ישנה יותר מ-x.y
. גרסת HAL שהוצאה משימוש עדיין נתמכת על ידי המסגרת לשדרוג מכשירים.
כשגרסה F
של FCM יוצאת, גרסה [email protected]
של HAL נחשבת כמוצאת משימוש אם היא לא מצוינת באופן מפורש בגרסה האחרונה של FCM עבור גרסת היעד V = F
של FCM. במכשירים שמופעלים עם V = F
, אחד מהתנאים הבאים מתקיים:
- נדרשת גרסה גבוהה יותר של המסגרת (גרסה ראשית או משנית);
- ה-HAL כבר לא נדרש במסגרת.
לדוגמה, ב-Android 9, [email protected]
מוצגת כשדרוג גרסה משמעותי של 1.0 HAL. המשתמש [email protected]
הוסר מ-compatibility_matrix.3.xml
אבל הוא מופיע ב-compatibility_matrix.legacy.xml
, ב-compatibility_matrix.1.xml
וב-compatibility_matrix.2.xml.
לכן, המאפיין [email protected]
נחשב כמאפיין שהוצא משימוש.
הוצאה משימוש של HAL של framework
כשממשק HAL מסוים של framework [email protected]
מוצא משימוש ב-FCM בגרסה F
, המשמעות היא שכל מכשיר שמופעל עם גרסת יעד של FCM V = F
או גרסה מאוחרת יותר לא יכול לצפות שה-framework יספק את foo
בגרסה x.y
, או בכל גרסה ישנה יותר מ-x.y
. גרסת HAL שהוצאה משימוש עדיין מסופקת על ידי המסגרת לצורך שדרוג מכשירים.
כשגרסה F
של FCM מופצת, גרסה [email protected]
של HAL נחשבת כמוצאת משימוש אם במניפסט של המסגרת מצוין max-level="F - 1"
עבור [email protected]
. במכשירים שמופעלים עם V = F
, המסגרת לא מספקת את HAL [email protected]
. במטריצת התאימות של המכשיר במכשירים שמופעלים עם V = F
, לא יכולות להיות רשימות של HALs של מסגרות עם max-level < V
.
לדוגמה, ב-Android 12, [email protected]
הוצא משימוש. המאפיין max-level
שלו מוגדר כ-5
, הגרסה של FCM שהושקה ב-Android 11. Android 12 framework
manifest
הסרת התמיכה בגרסאות יעד של FCM
כשמספר המכשירים הפעילים עם גרסת FCM מסוימת לטירגוט V
יורד מתחת לסף מסוים, גרסת ה-FCM לטירגוט מוסרת מהקבוצה SF של הגרסה הבאה של ה-Framework. כדי לעשות את זה, צריך לבצע את שני השלבים הבאים:
הסרת
compatibility_matrix.V.xml
מכללי ה-build (כדי שהיא לא תותקן בתמונת המערכת), ומחיקת כל קוד שהטמיע או הסתמך על היכולות שהוסרו.הסרת HALs של מסגרות עם
max-level
שקטן מ-V
או שווה לו מקובץ המניפסט של המסגרת, ומחיקת כל קוד שמטמיע HALs של מסגרות שהוסרו.
במכשירים עם גרסת FCM שהיא מחוץ ל-SF של מהדורת framework מסוימת, אי אפשר לשדרג למהדורה הזו.
הסרה של HALs שהוצאו משימוש
כשמסירים גרסה של FCM, חלק מממשקי HAL או גרסאות של ממשקי HAL כבר לא קיימים באף FCM. המשמעות היא שמערכת Android לא תומכת בהן יותר בכלל, גם לא בשדרוג מכשירים.
אחרי ש-HAL לא נתמך יותר, המפתחים מסירים הפניות לממשק HAL הזה מ-Android, כולל בקוד הלקוח במסגרת, בהטמעה שמוגדרת כברירת מחדל ובמקרים של בדיקות VTS.
אם אין HAL נתמכים שמוגדרים על בסיס ה-HAL שמוסר, אפשר להסיר את הגדרת ה-HAL עצמה בכמה שלבים נוספים.
- מסירים את הגדרת ממשק ה-HAL מקוד המקור. זה כולל את הקבצים
*.aidl
ואת המודולAndroid.bp
aidl_interface
. - אם מדובר ב-HIDL, מסירים את ה-HASH מהקובץ
hardware/interfaces/current.txt
. - אם מדובר ב-AIDL, מסירים את הספרייה
aidl_api
עם קובצי ה-AIDL הקפואים. - מסירים את הממשק מ-
hardware/interfaces/compatibility_matrices/exclude/fcm_exclude.cpp
.
סטטוס גרסת ה-HAL
בקטעים הבאים מתוארים (בסדר כרונולוגי) המצבים האפשריים של גרסת HAL.
לפני השקה
ב-HAL של מכשירים, אם גרסת HAL לא מופיעה באף אחת ממטריצות התאימות הציבוריות והקפואות, היא נחשבת לגרסה שלא פורסמה ואולי נמצאת בפיתוח.
הקטגוריה הזו כוללת גרסאות HAL שקיימות רק ב-compatibility_matrix.F.xml
.
לדוגמה:
- במהלך הפיתוח של Android 9, HAL
[email protected]
נחשב ל-HAL שלא פורסם והוא הופיע רק ב-compatibility_matrix.3.xml
. - שכבת ה-HAL
[email protected]
לא מופיעה באף אחת מטבלאות התאימות שפורסמו, והיא נחשבת גם כשכבת HAL שלא פורסמה.
במקרה של HALs של מסגרות, אם גרסת HAL נמצאת רק במניפסט של המסגרת של ענף פיתוח לא קשור, היא נחשבת כגרסה שלא פורסמה.
גרסה שפורסמה ועדכנית
ב-HAL של מכשירים, אם גרסת HAL נמצאת במטריצת תאימות ציבורית וקפואה, היא משוחררת. לדוגמה, אחרי שגרסה 3 של FCM קפואה ומתפרסמת ב-AOSP, [email protected]
HAL נחשבת לגרסת HAL שפורסמה ועדכנית.
אם גרסת HAL נמצאת במטריצת תאימות ציבורית וקפואה עם גרסת ה-FCM הגבוהה ביותר, גרסת ה-HAL היא עדכנית (כלומר, לא הוצאה משימוש). לדוגמה, גרסאות HAL קיימות (כמו [email protected]
שהוצגה ב-compatibility_matrix.legacy.xml
) שממשיכות להתקיים ב-compatibility_matrix.3.xml
נחשבות גם הן לגרסאות HAL שפורסמו ועדכניות.
ב-HALs של framework, אם גרסת HAL נמצאת במניפסט של framework של הענף האחרון שפורסם ללא מאפיין max-level
או (במקרים חריגים) עם מאפיין max-level
ששווה לגרסת ה-FCM שפורסמה בענף הזה או גבוה ממנה, היא נחשבת לגרסת HAL שפורסמה ועדכנית. לדוגמה, ה-HAL מופץ ועדכני ב-Android 12, כפי שמצוין במניפסט של Android 12 framework.displayservice
פורסם אבל הוצא משימוש
במקרה של HAL למכשירים, גרסת HAL יוצאת משימוש רק אם מתקיימים כל התנאים הבאים:
- הוא משוחרר.
- היא לא מופיעה במטריצת התאימות הציבורית והקפואה עם גרסת ה-FCM הגבוהה ביותר.
- היא נמצאת במטריצת תאימות ציבורית וקפואה שהמסגרת עדיין תומכת בה.
לדוגמה:
- ה-HAL של
[email protected]
נמצא ב-compatibility_matrix.legacy.xml
, ב-compatibility_matrix.1.xml
וב-compatibility_matrix.2.xml
, אבל לא ב-compatibility_matrix.3.xml
. לכן, היא נחשבת לשיטה שהוצאה משימוש ב-Android 9. - ב-Android 9 יש שדרוג של גרסה משנית של Power HAL, אבל
[email protected]
עדיין נמצא ב-compatibility_matrix.3.xml
. -
[email protected]
compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
ו-compatibility_matrix.2.xml
. - ל
compatibility_matrix.3.xml
יש את[email protected]
.
לכן, [email protected]
הוא עדכני, אבל לא הוצא משימוש ב-Android 9.
ב-HALs של framework, אם גרסת HAL נמצאת במניפסט של framework של הענף האחרון שפורסם עם מאפיין max-level
נמוך יותר מגרסת ה-FCM שפורסמה בענף הזה, היא נחשבת לגרסת HAL שפורסמה אבל הוצאה משימוש. לדוגמה, מודול ה-HAL schedulerservice
פורסם אבל הוצא משימוש ב-Android 12, כפי שמצוין במניפסט של Android 12 framework.
הוסר
במקרה של HALs של מכשירים, גרסת HAL מוסרת אם ורק אם התנאים הבאים מתקיימים:
- הוא פורסם בעבר.
- הוא לא מופיע באף מטריצת תאימות ציבורית וקפואה שהמסגרת תומכת בה.
מטריצות תאימות שהן ציבוריות, קפואות אבל לא נתמכות על ידי מסגרת העבודה נשמרות בבסיס הקוד כדי להגדיר את קבוצת הגרסאות של HAL שהוסרו, כך שאפשר לכתוב בדיקות VTS כדי לוודא ש-HAL שהוסרו לא נמצאים במכשירים חדשים.
במקרה של HALs של מסגרות, גרסת HAL מוסרת אם ורק אם מתקיימים התנאים הבאים:
- הוא פורסם בעבר.
- הוא לא מופיע באף מניפסט של מסגרת בענף האחרון שפורסם.
הודעות FCM מדור קודם
הערך Target FCM Version legacy הוא ערך מיוחד לכל המכשירים שאינם Treble. במאמר בנושא FCM מדור קודם, compatibility_matrix.legacy.xml
, מפורטות הדרישות של המסגרת במכשירים מדור קודם (כלומר, מכשירים שהושקו לפני Android 8.0).
אם הקובץ הזה קיים ב-FCM בגרסה F
, אפשר לשדרג כל מכשיר שאינו Treble לגרסה F
, בתנאי שמניפסט המכשיר תואם לקובץ הזה. ההסרה שלו מתבצעת באותו אופן כמו הסרת FCM לגרסאות אחרות של FCM Target (ההסרה מתבצעת אחרי שמספר המכשירים הפעילים עם גרסה קודמת ל-8.0 יורד מתחת לסף מסוים).
גרסאות FCM שפורסמו
רשימת הגרסאות של FCM שפורסמו זמינה בכתובת hardware/interfaces/compatibility_matrices
.
כדי למצוא את גרסת FCM שפורסמה עם גרסת Android ספציפית, אפשר לעיין במאמר Level.h
.