רמת ה-API של הספק

רמת ה-API של הספק מתייחסת לגרסת הממשק שנתמכת במחיצת הספק. הממשק הוא דו-כיווני. הוא מתאר את ממשק ה-API שמחיצה של הספק מספקת למחיצה של המערכת (שכבת האובייקטים המופשטים של החומרה או ממשק HAL), וגם את ממשק ה-API שמחיצה של הספק דורשת ממחיצה של המערכת (ערכת הפיתוח לדיירים ברמה נמוכה או ממשק LLNDK).

רמת ה-API של הספק משמשת גם כדי לקבוע את דרישות התוכנה של הספק (VSR), שהן אוסף של דרישות פונקציונליות ולא פונקציונליות שהתוכנה במחיצת הספק צריכה לעמוד בהן.

בהמשך הדף נסביר איך נעשה שימוש במאפייני המערכת, בהתאם לגרסה של Android, כדי לקבוע את רמת ה-API של הספק.

הקפאה של ספק

Android מאפשרת לספקים להקפיא את המחיצה של הספק בגרסה ספציפית של VSR. קבוצת התכונות שמערכת Android מצפה לקבל מהמחיצה של הספק נקבעת לפי רמת ה-API של הספק שמשויכת למחיצה של הספק. במהלך זמן הריצה, ההתנהגות של התוכנה שפועלת במחיצה של המערכת מותאמת לרמת ה-API של הספק במחיצה של הספק. לדוגמה, יכול להיות שהתוכנה במחיצה של המערכת לא תשתמש בתכונות חדשות אם הן לא נתמכות ברמת ה-API של מחיצה של הספק.

אפשר להקפיא את הספק רק אם יוצרים מכשיר תואם ל-Android.

קביעת רמת ה-API של הספק (Android 14-QPR3 ואילך)

ב-Android 14-QPR3 ואילך, רמת ה-API של הספק פורסמת בנפרד, כלומר רמת ה-API של ה-SDK ורמת ה-API של הספק לא מסונכרנות.

בגלל לוחות הזמנים הנפרדים של הגרסאות, ב-Android 14-QPR3 ואילך, רמת ה-API של הספק מופרדת לחלוטין מרמת ה-API של ה-SDK. כדי להבהיר את ההפרדה הזו, הפורמט של רמת ה-API של הספק הוא תאריך בפורמט YYYYMM (שנה וחודש), ואילו רמת ה-SDK היא מספר שלם.

בגרסאות Android 14-QPR3 ואילך יש את מאפייני המערכת הבאים שקשורים לרמת ה-API של הספק (ro.vendor.api_level):

מאפיין מערכת פורמט תיאור הגדרה ראשונית
ro.board.api_level YYYYMM רמת ה-API של הספק שתוכנת הצ'יפסט תומכת בה. הנכס הזה מוגדר לכל שבבי הצ'יפים. המערכת ליצירת גרסאות build מגדירה את זה באופן אוטומטי.
ro.board.first_api_level YYYYMM רמת ה-API של הספק שבה תוכנת הצ'יפסט הושקה לראשונה. המאפיין הזה הוא פונקציה של ערכת השבבים בלבד, והוא מוגדר על ידי ספקי SoC אם ערכת השבבים של SoC עומדת בדרישות להקפאת ספקים. אחרי ההגדרה הראשונית, אין לשנות אותה. ספקי SoC מגדירים את ההגדרה הזו באמצעות BOARD_SHIPPING_API_LEVEL.
ro.product.first_api_level מספר שלם רמת ה-API של ה-SDK שבה המכשיר הופעל לראשונה. הנכס הזה מוגדר על ידי יצרן הציוד המקורי (OEM) ולא מתעדכן אף פעם, גם אחרי שדרוגים של מערכת ההפעלה.
ro.vendor.api_level YYYYMM רמת ה-API של הספק שאליה המכשיר כולו צריך להתאים. התיאור מופיע אחרי הטבלה הזו.
ro.board.api_frozen בוליאני המאפיין הזה מוגדר לערך true אם רמת ה-API של הספק ש-ro.board.api_level מייצגת הושלמה. אם הנכס הזה לא מוגדר, ברירת המחדל שלו היא false.
ro.llndk.api_level YYYYMM רמת ה-API של הספק בפורמט YYYYMM שמספקים ה-LLNDK הנוכחי במחיצת המערכת. LLNDK תואם לאחור, כך שאפשר להשתמש בתמונת המערכת הזו כדי לבצע אימייל בכל קובץ אימג' של ספק ברמה זהה או נמוכה יותר של ממשק ה-API. המאפיין הזה מוגדר על ידי מחיצת המערכת.

המאפיין ro.vendor.api_level נגזר באחת משתי הדרכים הבאות:

  • אם ערכת השבבים עומדת בדרישות להקפאת ספק:

    ro.vendor.api_level = min(
      ro.board.api_level,
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level))
    
  • אם הצ'יפסט לא נמצא בהקפאה של הספק:

    ro.vendor.api_level =
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level)
    

ה-method AVendorSupport_getVendorApiLevelOf() קובעת את רמת ה-API המתאימה של הספק לפי רמת ה-API של ה-SDK. לדוגמה, הפונקציה AVendorSupport_getVendorApiLevelOf(35), שבה 35 הוא רמת ה-SDK API של הגרסה העיקרית של Android שפורסמה בשנת 2024, מחזירה את הערך 202404, שהוא התאריך המשוער של Android 14-QPR3 שבו הוגדרה רמת ה-Vendor API הנוכחית.

איך קובעים את רמת ה-API של הספק (Android 13)

רמת ה-API של הספק תואמת לרמת ה-API של ה-SDK, שרלוונטית לממשק של האפליקציה למערכת ההפעלה, ומתעדכנת פעם בשנה כשפלטפורמת Android החדשה משוחררת ל-AOSP.

Android 13 מכיל את מאפייני המערכת הבאים שקשורים לרמת ה-API של הספק (ro.vendor.api_level):

מאפיין מערכת פורמט תיאור הגדרה ראשונית
ro.board.first_api_level מספר שלם רמת ה-API של הספק שבה תוכנת הצ'יפסט הושקה לראשונה. זוהי פונקציה של ערכת השבבים בלבד, וספקי SoC או יצרני ציוד מקורי לא יכולים לשנות אותה. המאפיין הזה מוגדר רק למערכי שבבים שעומדים בדרישות להקפאת הספק כדי להגדיר את הערך, מגדירים את BOARD_SHIPPING_API_LEVEL בקובץ device.mk.
ro.board.api_level מספר שלם רמת ה-API של הספק שתוכנת הצ'יפסט תומכת בה. המאפיין הזה מוגדר רק עבור שבבי הצ'יפים שעומדים בדרישות להקפאת ספקים. המאפיין הזה מוגדר לכל ערכות הצ'יפים. בשלב הראשון, מערכת ה-build מגדירה את הערך של המאפיין הזה לאותו ערך כמו ro.board.first_api_level, אבל אפשר לעדכן אותו אם מעדכנים את המחיצה של הספק.
ro.product.first_api_level מספר שלם רמת ה-API של ה-SDK שבה המכשיר הופעל לראשונה. המאפיין הזה מוגדר על ידי ה-OEM ואז לא מתעדכן אף פעם, גם לאחר שדרוגים של מערכת ההפעלה.
ro.vendor.api_level מספר שלם רמת ה-API של הספק שהמכשיר כולו צריך לעמוד בה. התיאור מופיע אחרי הטבלה הזו.
ro.vndk.version מספר שלם הגרסה של VNDK שבה הוקם המחיצה של הספק. הנכס הזה מוגדר על ידי מחיצת המערכת.
ro.vendor.build.version.sdk מספר שלם רמת ה-API של ה-SDK של עץ המקור שבו נבנתה מחיצת הספק.
ro.vendor.build.version.release מספר שלם גרסת הפלטפורמה של עץ המקור שבו הוקם המחיצה של הספק.
ro.vendor.build.version.release_or_codename מספר שלם שם הקוד של עץ המקור שבו הוקם המחיצה של הספק.

המאפיין ro.vendor.api_level מוגדר אוטומטית למינימום ro.board.api_level (או ro.board.first_api_level אם ro.board.api_level לא מוגדר) ול-ro.product.first_api_level.