מחזור החיים של FCM

לגרסה של 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

  1. העתקת compatibility_matrix.<F-1>.xml האחרון אל compatibility_matrix.F.xml.
  2. עליך לעדכן את המאפיין level בקובץ ל-F.
  3. צריך להוסיף כללי 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, והיא כוללת את השלבים הבאים:

  1. חשוב לוודא שה-compatibility_matrix.F.xml כולל את המאפיין level="F".
  2. צריך לוודא שכל המכשירים כוללים את גרסת ה-build והאתחול.
  3. עדכון בדיקות VTS כדי להבטיח שמכשירים יופעלו עם ה-framework העדכני ביותר ( ברמת Shipping API) כוללים את גרסה V >= F של היעד ב-FCM.
  4. מפרסמים את הקובץ ב-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 הבאה. כדי לעשות את זה:

  1. הסרת compatibility_matrix.V.xml מכללי ה-build (כדי שהוא לא יהיה שמותקנים בתמונת המערכת), ומוחקים כל קוד שהטמיע או תלויה ביכולות שהוסרו.

  2. הסרת מסגרת 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.
  • היא נמצאת במטריצת תאימות ציבורית וקפואה, שעדיין נתמך.

לדוגמה:

לכן, הערך 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