לגרסה של Android framework יש כמה מטריצות תאימות ל-framework (FCM), אחד לכל גרסת יעד של FCM שניתן לשדרג, שמגדירים שה-framework עשוי להשתמש בהן ובדרישות הגרסה של FCM לטירגוט. כחלק מ-FCM. במחזור החיים, Android מוציא משימוש ומסיר HIDL HALs, ואז משנה את קובצי FCM משקפים את הסטטוס של גרסת HAL.
כדי לאפשר OTA רק במסגרת מסגרות בלבד בסביבות שלהם, שותפים שמרחיבים את גם ממשקי ספקים צריכים להוציא משימוש ולהסיר HIDL HALs באמצעות שיטות.
טרמינולוגיה
- מטריצת תאימות של framework (FCM)
- קובץ XML שמציין דרישות framework לגבי ספק תואם בפועל. למטריצת התאימות יש גרסאות וגרסה חדשה הוא קפוא עבור כל גרסת framework. כל גרסת framework כוללת כמה מנהלי FCM.
- גרסאות של Platform FCM (SF)
- קבוצת כל הגרסאות של FCM בגרסת framework. תוכנת ה-framework יכולה לפעול עם כל הטמעה של ספק שתואמת לאחת מפלטפורמות ה-FCM האלה.
- גרסת FCM (F)
- הגרסה הגבוהה ביותר מבין כל הספקים של FCM בגרסת framework.
- גרסת יעד של FCM (V)
- גרסת FCM המטורגטת (מ-SF), שהוצהרה במפורש במכשיר ספציפי, שהטמעה של ספק מספקת. הטמעת ספק חייבת להיות שנוצרו מול FCM שפורסם, אף על פי שהוא עשוי להכריז על גרסאות HAL חדשות יותר מניפסט המכשיר.
- גרסת HAL
- גרסת HAL היא בפורמט
foo@x.y
, כאשרfoo
הוא השם עם HAL ו-x.y
הוא את הגרסה הספציפית; לדוגמהnfc@1.0
,keymaster@3.0
(קידומת השורש, למשל:android.hardware
, הושמט לאורך המסמך הזה.) - מניפסט מכשירים
- קובצי XML שמציינים אילו גרסאות HAL בצד המכשיר של ממשק הספק, כולל תמונות של הספק ושל ODM. התוכן של מניפסט המכשיר מוגבל על ידי גרסת היעד של FCM של המכשיר, אבל יכול לכלול רשימות עם הנחיות HAL חדשה לגמרי יחסית ל-FC התואם ל-V.
- אישורי ממשק אנושי (HAL) של מכשיר
- HAL שמצוינים (מסופקים) במניפסט המכשיר ומפורטים (חובה או אופציונלי) במטריצת התאימות של framework (FCM).
- מטריצת תאימות מכשירים (DCM)
- קובץ XML המפרט דרישות ספק ל-framework תואם בפועל. כל מכשיר מכיל חשבון DCM אחד.
- מניפסט של מסגרת
- קובץ XML שמציין אילו גרסאות HAL של המסגרת בצד הספק כולל מערכת, system_ext ותמונות מוצר. מודעות עם HAL המניפסט של framework מושבת באופן דינמי בהתאם ל-FCM כיעד של המכשיר .
- מסגרות HAL
- יעדי HAL שרשומים כמפורטים במניפסט של המסגרת ומופיעים בתור חובה או אופציונלי במטריצת התאימות של המכשירים (DCM).
מחזור החיים של FCM ב-codebase
במסמך הזה מתואר מחזור החיים של FCM באופן מופשט. כדי לראות את
מניפסטים נתמכים: hardware/interfaces/compatibility_matrix.<FCM>.xml
שבהם אפשר למצוא את FCM.
system/libvintf/include/vintf/Level.h
.
מכשיר ששולח את גרסת ההפצה המתאימה של Android צפוי לכלול ערך FCM גדול יותר מהרמה המקבילה או שווה לה. לדוגמה, משלוח של מכשיר עם Android 11 בדרך כלל יהיה ברמה 5 של FCM, אבל FCM ברמה 6 ומעלה, שכוללת דרישות נוספות שצוינו במטריצות התאימות. הרמות הנתמכות הן:
FCM | גרסת Android |
---|---|
4 | Android 10/Q |
5 | Android 11/R |
6 | Android 12/S |
7 | Android 13/T |
8 | Android 14/U |
202404 | Android 15/V |
גם כשמערכת Android מוציאה משימוש רמת FCM, היא עדיין נתמכת במכשירים קיימים.
פיתוח בגרסת FCM חדשה
מערכת Android מגדילה את גרסת FCM לכל גרסת framework (למשל, 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
בגרסה F
של FCM, מוסיפים את ה-HAL ל-compatibility_matrix.F.xml
עם
הגדרות optional
הבאות:
optional="false"
אם מכשירים ששולחים עםV = F
חייבים לפעול עם ממשק ה-HAL הזה,optional="true"
אם ניתן להפעיל מכשירים שנשלחים עםV = F
בלי ממשק ה-HAL הזה.
לדוגמה, ב-Android 8.1 הוספנו את cas@1.0
כ-HAL אופציונלי. המכשירים שמופעלים
עם Android 8.1 לא נדרשים כדי להטמיע את מדד ה-HAL הזה, כך שהרשומה הבאה
נוספו ל-compatibility_matrix.F.xml
(שנקראו בעבר
compatibility_matrix.current.xml
באופן זמני במהלך הפיתוח של אותה גרסה):
<hal format="hidl" optional="true">
<name>android.hardware.cas</name>
<version>1.0</version>
<interface>
<name>IMediaCasService</name>
<instance>default</instance>
</interface>
</hal>
שדרוג HAL (שני)
במהלך הפיתוח, כשיש ל-HAL שדרוג לגרסה משנית מ-x.z
ל-
x.(z+1)
בגרסה F
הנוכחית של FCM, אם הגרסה הזו:
- נדרש במכשירים שמופעלים עם
V = F
,compatibility_matrix.F.xml
חובה לצייןx.(z+1)
ו-optional="false"
. - לא נדרש במכשירים שמופעלים עם
V = F
, ב-compatibility_matrix.F.xml
צריך להעתיק אתx.y-z
ואפשרות חובה מתוךcompatibility_matrix.<F-1>.xml
ושינוי הגרסה ל-x.w-(z+1)
(כאשרw >= y
).
לדוגמה, ב-Android 8.1 הושקה הגרסה broadcastradio@1.1
כגרסה משנית
לשדרוג של 1.0 HAL. הגרסה הישנה יותר, broadcastradio@1.0
, היא אופציונלית עבור
עם Android 8.0 בזמן שהגרסה החדשה יותר,
broadcastradio@1.1
, הוא אופציונלי במכשירים שמופעלים עם Android 8.1. לחשבון
compatibility_matrix.1.xml
:
<hal format="hidl" optional="true">
<name>android.hardware.broadcastradio</name>
<version>1.0</version>
<interface>
<name>IBroadcastRadioFactory</name>
<instance>default</instance>
</interface>
</hal>
רשומה זו הועתקה אל compatibility_matrix.F.xml
ושונה באופן הבא:
<hal format="hidl" optional="true">
<name>android.hardware.broadcastradio</name>
<version>1.0-1</version>
<interface>
<name>IBroadcastRadioFactory</name>
<instance>default</instance>
</interface>
</hal>
שדרוג HAL (ראשי)
במהלך הפיתוח, ל-HAL יש שדרוג לגרסה ראשית ב-FCM הנוכחי
גרסה F
, הגרסה הראשית החדשה x.0
נוספה אל
compatibility_matrix.F.xml
עם ההגדרות הבאות של optional
:
optional="false"
עם גרסהx.0
בלבד, אם המכשירים נשלחים עם ההפעלה שלV = F
חייבת להתבצע עםx.0
.optional="false"
אבל יחד עם גרסאות ראשיות ישנות יותר באותו<hal>
תג, אם מכשירים ששולחים עםV = F
חייבים לפעול עם HAL הזה, אבל יכולים להפעיל עם גרסה ראשית ישנה יותר.optional="true"
אם לא צריך להפעיל מכשירים שמספקים משלוחים אלV = F
עם HAL.
לדוגמה, Android 9 כולל את health@2.0
שדרוג לגרסה הראשית של 1.0 HAL והוצאה משימוש של 1.0 HAL. הישן יותר
הגרסה health@1.0
היא אופציונלית במכשירים שמותקנת בהם מערכת ההפעלה Android 8.0
Android 8.1. מכשירים שמופעלים עם Android 9 חייבים
לא לספק את גרסת HAL 1.0 שהוצאה משימוש, ובמקום זאת לספק את הגרסה החדשה של 2.0.
compatibility_matrix.legacy.xml
compatibility_matrix.1.xml
, וגם
compatibility_matrix.2.xml
:
<hal format="hidl" optional="true">
<name>android.hardware.health</name>
<version>1.0</version>;
<interface>
<name>IHealth</name>
<instance>default</instance>
</interface>
</hal>
הרשומה הזו הועתקה אל compatibility_matrix.F.xml
והשתנתה באופן הבא:
<hal format="hidl" optional="false">
<name>android.hardware.health</name>
<version>2.0</version>
<interface>
<name>IHealth</name>
<instance>default</instance>
</interface>
</hal>
הגבלות:
- מכיוון ש-2.0 HAL נמצא ב-
compatibility_matrix.3.xml
עםoptional="false"
, מכשירים שמופעלים באמצעות Android 9 צריכים להישלח עם 2.0 HAL. - מאחר ש-1.0 HAL לא נמצא ב
compatibility_matrix.3.xml
, במכשירים שמופעלת בהם Android 9 אסור לספק HAL 1.0 (מכיוון ש-HAL הזה נחשב כהוצאה משימוש). - מכיוון שגרסת 1.0 HAL קיימת ב
legacy/1/2.xml
(גרסאות ישנות יותר של FCM), Android 9 יכול לעבוד עם) בתור HAL אופציונלי, framework של Android 9 עדיין יכול לפעול עם גרסת HAL 1.0 (שלא נחשבת לגרסת HAL שהוסרה).
גרסאות חדשות של FCM
תהליך ההשקה של גרסת FCM במחיצת המערכת הוא אך ורק של Google כחלק מגרסת AOSP, והיא כוללת את השלבים הבאים:
- חשוב לוודא שה-
compatibility_matrix.F.xml
כולל את המאפייןlevel="F"
. - צריך לוודא שכל המכשירים כוללים את גרסת ה-build והאתחול.
- עדכון בדיקות VTS
כדי להבטיח שמכשירים יופעלו עם ה-framework העדכני ביותר (
ברמת Shipping API) כוללים את גרסה
V >= F
של היעד ב-FCM. - מפרסמים את הקובץ ב-AOSP.
לדוגמה, בדיקות VTS להבטיח שמכשירים יופעלו עם Android ל-9 יש גרסת יעד של FCM >= 3.
בנוסף, מנהלי FCM של המוצר ו-system_ext עשויים גם להציג דרישות לכל אחד מהם גרסאות FCM לפלטפורמה. הפצה של גרסאות FCM במוצר וב-system_ext חלוקת התמונות מתבצעת על ידי הבעלים של התמונות, בהתאמה. גרסת FCM המספרים במחיצות product_ext ו-system_ext צריכים להיות זהים לאלה שבמחיצות על מחיצת המערכת. בדומה לגרסאות FCM במחיצת המערכת, מטריצת התאימות של FCM בגרסה F במחיצות המוצר ו-system_ext. משקף את הדרישות במכשיר עם יעד FCM בגרסה F.
הוצאה משימוש של גרסת HAL
הוצאה משימוש של גרסת HAL נעשית בהחלטה של המפתח (למשל, עבור AOSP HALs, Google מקבל החלטה). זה עשוי לקרות כשגרסת HAL גבוהה יותר (בין אם מדובר בגרסה משנית או ראשי)
הוצאה משימוש של מכשיר HAL
כשמכשיר HAL foo@x.y
הוצא משימוש בגרסה F
של FCM, המשמעות היא
שכל מכשיר שיופעל עם יעד FCM בגרסה V = F
ואילך
להטמיע את foo
בגרסה x.y
או בכל גרסה ישנה יותר מ-x.y
. A שהוצא משימוש
גרסת HAL עדיין נתמכת על ידי ה-framework לשדרוג מכשירים.
בעת פרסום גרסה F
של FCM, גרסת HAL foo@x.y
מובאת בחשבון
הוצאה משימוש אם גרסת ה-HAL הספציפית לא צוינה באופן מפורש
FCM עבור גרסה V = F
של יעד FCM. במכשירים שמושקים עם V = F
, אחד מ-
התנאים הבאים מתקיים:
- המסגרת דורשת גרסה גבוהה יותר (ראשית או משנית).
- ל-framework אין יותר צורך ב-HAL.
לדוגמה, ב-Android 9 אנחנו משיקים את health@2.0
כשדרוג של גרסה ראשית של 1.0 HAL. health@1.0
הוסר/ה מ-
compatibility_matrix.3.xml
אבל קיים ב:
compatibility_matrix.legacy.xml
,
compatibility_matrix.1.xml
,
ו-compatibility_matrix.2.xml.
לכן, health@1.0
נחשב כהוצאה משימוש.
הוצאה משימוש של מסגרת HAL של framework
כשמסגרת HAL מסוימת של foo@x.y
הוצאה משימוש בגרסה F
של FCM, המשמעות היא
שכל מכשיר שיופעל עם יעד FCM בגרסה V = F
ואילך
מצופה ש-framework יספק את foo
בגרסה x.y
או בכל גרסה ישנה יותר
מאשר x.y
. ה-framework עדיין מספק גרסת HAL שהוצאה משימוש
כדי לשדרג מכשירים.
כשמפרסמים את גרסת FCM F
, היא מתייחסת לגרסת HAL foo@x.y
הוצא משימוש אם במניפסט של framework צוין
max-level="F - 1"
ל-foo@x.y
. למכשירים שמופעלים
עם V = F
, המסגרת לא מספקת foo@x.y
HAL. המכשיר
מטריצת תאימות במכשירים שמופעלים עם V = F
לא יכולה להציג מסגרת
שיעורי HAL במסגרת max-level < V
.
לדוגמה, ב-Android 12, schedulerservice@1.0
הוא
הוצא משימוש. המאפיין max-level
שלו מוגדר כ-5
, ההשקה של גרסת FCM
ב-Android 11. צפייה
מסגרת Android 12
מניפסט.
הסרת התמיכה בגרסאות היעד של FCM
כשמכשירים פעילים בגרסת יעד מסוימת של FCM V
יורדים מתחת לערך מסוים
גרסת היעד של FCM תוסר מה-SF שהוגדר
את גרסת ה-framework הבאה. כדי לעשות את זה:
הסרת
compatibility_matrix.V.xml
מכללי ה-build (כדי שהוא לא יהיה שמותקנים בתמונת המערכת), ומוחקים כל קוד שהטמיע או תלויה ביכולות שהוסרו.הסרת מסגרת HAL של framework עם
max-level
שנמוך מ-V
או שווה לו המניפסט של framework, ומחיקה של כל קוד שמיישם את הקובץ שהוסר מסגרת HALs.
מכשירים עם גרסת יעד של FCM מחוץ ל-SF למסגרת נתונה לא ניתן לשדרג לגרסה הזו.
סטטוס גרסת HAL
בקטעים הבאים מתוארים (בסדר כרונולוגי) המצבים האפשריים של גרסת HAL.
לפני השקה
עבור מכשירים עם HAL, אם גרסת HAL לא זמינה באף אחד מהציבור הרחב והיא הוקפאה
מטריצות תאימות, הן נחשבות שלא פורסמו וייתכן שהן בפיתוח.
זה כולל גרסאות HAL שנמצאות רק ב-compatibility_matrix.F.xml
.
לדוגמה:
- במהלך הפיתוח של Android 9,
חבילת HAL של
health@2.0
נחשבה ל-HAL שלא פורסמה והשתתפה רקcompatibility_matrix.3.xml
. - ה-HAL
teleportation@1.0
לא נכלל במטריצות תאימות שפורסמו, וגם נחשב גם לקובץ HAL שלא פורסם.
ב-framework HALs, אם גרסת HAL מופיעה רק במניפסט של framework הסתעפות פיתוח לא קשורה, נחשבת לא להפצה.
הגרסה הנוכחית והגרסה שפורסמה
למכשירי HAL של מכשירים, אם גרסת HAL זמינה בתאימות ציבורית וקפואה כלשהי
הוא משוחרר. לדוגמה, לאחר שגרסה 3 של FCM הוקפאה ופורסם
ל-AOSP, הנחיות ה-HAL של health@2.0
נחשבות לגרסת HAL שהושקה ומופצת.
אם גרסת HAL נמצאת במטריצת תאימות ציבורית וקפואה שכוללת את
גרסת FCM הגבוהה ביותר: גרסת ה-HAL היא עדכנית (כלומר לא הוצאה משימוש). עבור
למשל, גרסאות HAL קיימות (כמו nfc@1.0
שהושקו ב-
compatibility_matrix.legacy.xml
)
שממשיכות להופיע ב-compatibility_matrix.3.xml
נחשבות גם כ-
שהושקו וגרסאות HAL עדכניות.
עבור framework HAL, אם יש גרסת HAL במניפסט של framework
של ההסתעפות האחרונה שפורסמה ללא המאפיין max-level
או (בדרך כלל)
max-level
שווה לגרסת FCM שפורסמה בהסתעפות הזו או גבוהה ממנה, היא
נחשבת לגרסת HAL שפורסמה ונוכחית. לדוגמה,
גרסת ה-HAL של displayservice
הושקה וזמינה כרגע ב-Android
12, כפי שצוין על ידי
מסגרת Android 12
מניפסט.
הופץ אבל הוצא משימוש
למכשירי HALs, גרסת HAL הוצאה משימוש אם ורק אם כל עומדים ב:
- היא הושקה.
- היא לא נמצאת במטריצת התאימות הציבורית והקפואה ביותר גרסת FCM.
- היא נמצאת במטריצת תאימות ציבורית וקפואה, שעדיין נתמך.
לדוגמה:
- שיעור ה-HAL של
health@1.0
נמצאcompatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
, וגםcompatibility_matrix.2.xml
, אבל לא ב:compatibility_matrix.3.xml
לכן היא נחשבת הוצאה משימוש Android 9. - ל-Power HAL יש שדרוג גרסה משנית ב-Android
9, אבל
power@1.0
עדיין ב-compatibility_matrix.3.xml
. power@1.0
compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
, ו-compatibility_matrix.2.xml
.- ל
compatibility_matrix.3.xml
יש אתpower@1.0-1
.
לכן, הערך power@1.0
עדכני, אבל לא הוצא משימוש ב-Android
9.
ב-framework HALs, אם גרסת HAL נמצאת במניפסט של framework של
הסתעפות שפורסמה עם מאפיין max-level
נמוך יותר מגרסת הגרסה של FCM
בהסתעפות הזו היא נחשבת לגרסת HAL שהופצה אבל הוצאה משימוש. עבור
לדוגמה, הנחיות ה-HAL של schedulerservice
הושקו אבל הוצאו משימוש
Android 12, כפי שצוין על ידי
מניפסט של framework ב-Android 12.
הוסר
למכשירי HALs, גרסת HAL תוסר רק אם נכון:
- היא הושקה בעבר.
- היא לא נמצאת במטריצת תאימות ציבורית או קפוא נתמך.
מטריצות תאימות שהן ציבוריות, קפואות, אך לא נתמכות על ידי של ה-framework נשמרות ב-codebase כדי להגדיר את גרסאות ה-HAL שהוסרו שניתן לכתוב בדיקות VTS כדי לוודא שיעדי HAL שהוסרו לא נמצאים במכשירים חדשים.
ב-framework HALs, אנחנו מסירים גרסת HAL אם ורק אם פגש:
- היא הושקה בעבר.
- הוא לא נכלל באף מניפסט מסגרת של ההסתעפות האחרונה שפורסמה.
מנהלי FCM מדור קודם
גרסת היעד של FCM היא ערך מיוחד לכל המכשירים שהם לא טרבל.
גרסה קודמת של FCM, compatibility_matrix.legacy.xml
, מפרטת את הדרישות
של ה-framework במכשירים מדור קודם (כלומר מכשירים שהופעלו לפני Android 8.0).
אם הקובץ הזה קיים ל-FCM בגרסה F
, כל מכשיר שהוא לא טרבל יכול להיות
שודרג לקובץ F
בתנאי שהמניפסט של המכשיר תואם לקובץ הזה. שלו
ההסרה מתבצעת באותו תהליך כמו מנהלי FCM עבור גרסאות יעד אחרות של FCM.
(הוסרה לאחר שמספר המכשירים הפעילים לפני גרסה 8.0 ירד מתחת לערך מסוים
).
גרסאות FCM שפורסמו
ניתן למצוא רשימה של גרסאות FCM שפורסמו בקטע
hardware/interfaces/compatibility_matrices
כדי לבדוק איזו גרסה של FCM פורסמה בגרסה ספציפית של Android:
Level.h