עיצוב תמונת מצב של VNDK

קובצי snapshot של VNDK יכולים לשמש קובץ אימג' של מערכת כדי לספק את ספריות VNDK הנכונות לקובצי אימג' של ספקים, גם אם קובצי האימג' של המערכת ושל הספקים נוצרו מגרסאות שונות של Android. כדי ליצור קובץ snapshot של VNDK, צריך לתעד את ספריות VNDK כקובץ snapshot ולסמן אותן במספר גרסה. ייתכן שתמונת הספק תקשר לגרסה ספציפית של VNDK שמספקת את ממשקי ה-ABI הנדרשים למערכי המודולים בתמונת הספק. עם זאת, באותה גרסת VNDK, ספריות VNDK חייבות להיות ABI-stable.

תכנון קובץ ה-snapshot של VNDK כולל שיטות ליצירת גרסאות build מראש של קובץ snapshot של VNDK מתמונת המערכת הנוכחית, והתקנה של ספריות ה-lib שנוצרו מראש למחיצה המערכת של גרסה חדשה יותר של Android.

מידע על ספריות VNDK

HIDL-HALs, שהוצגו ב-Android 8.0, מאפשרים שדרוגים נפרדים למחיצות המערכת ולמחיצות של הספקים. VNDK מגדיר קבוצות של ספריות (VNDK-core,‏ VNDK-SP ו-LL-NDK) שקוד של ספקים יכול לקשר אליהן, ומונע מהספקים להשתמש בספריות שלא נמצאות בקבוצה של VNDK. כתוצאה מכך, אפשר ליצור את קובץ האימג' של הספק ולהריץ אותו אם קבוצות VNDK המתאימות בקובץ האימג' של המערכת מסופקות לקובץ האימג' של הספק.

VNDK-core

קבוצת הספריות של VNDK-core מותקנת ב-/system/lib[64]/vndk-${VER} וזמינה רק לתהליכי ספקים עם רמת API שווה ל-${VER}. תהליכי המערכת לא יכולים להשתמש בספריות האלה, ובמקום זאת הם חייבים להשתמש בספריות שמותקנות ב-/system/lib[64]. בגלל ההגבלה המחמירה על מרחב השמות לכל תהליך, ספריות VNDK-core מוגנות מטעינה כפולה.

כדי לכלול ספרייה ב-VNDK-core, מוסיפים את הקטע הבא לקובץ Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

ספריות VNDK-SP מותקנות ב-/system/lib[64]/vndk-sp-${VER} וזמינות לתהליכים של הספק ולתהליכים של המערכת (דרך ספריות SP-HAL שמותקנות במחיצה של הספק). אפשר לטעון ספריות VNDK-SP בשתי דרכים.

כדי לכלול ספרייה ב-VNDK-SP, מוסיפים את הפרטים הבאים לקובץ Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

ספריות LL-NDK מותקנות ב-/system/lib[64]. מודולים של ספקים יכולים להשתמש בספריות stub של LL-NDK כדי לגשת לסמלים שנבחרו מראש בספריות LL-NDK. ספריות LL-NDK צריכות להיות תואמות לאחור ויציבות מבחינת ABI כדי לאפשר לגרסאות ישנות של מודולים של ספקים להשתמש בגרסאות חדשות של ספריות LL-NDK. בגלל המאפיינים היציבים של ABI ב-LL-NDK, קובץ ה-snapshot של VNDK לא צריך לכלול ספריות LL-NDK לתמונות ישנות של ספקים.

מידע על קובצי snapshot של VNDK

Android 8.1 כלל ספריות VNDK שנוצרו מקוד המקור. עם זאת, בגרסאות מאוחרות יותר של Android, צריך לצלם כל גרסה של VNDK כקובץ snapshot ולספק אותה כ-pre-build כדי לאפשר קישור לתמונת ספק ישנה יותר.

החל מ-Android 9, גרסאות חדשות של Android יכללו לפחות קובץ snapshot אחד של הספריות VNDK-core ו-VNDK-SP לגרסאות ישנות יותר בקוד המקור של Android. בזמן ה-build, קובצי snapshot הנדרשים יותקנו בתיקיות /system/lib[64]/vndk-${VER} ו-/system/lib[64]/vndk-sp-${VER} (תיקיות שבהן ניתן להשתמש במחיצה של הספק), כאשר ${VER} הוא משתנה המחרוזת שמייצג את שם הגרסה של קובץ ה-snapshot של VNDK.

מכיוון שספריות snapshot של VNDK עשויות להיות שונות בכל גרסת VNDK, קובץ ה-snapshot של VNDK כולל גם את הגדרות מרחב השמות של הקישור, שמותקנות בתור etc/ld.config.${VER}.txt,‏ /etc/llndk.libraries.${VER}.txt ו-/etc/vndksp.libraries.${VER}.txt.

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

אין צורך בתמונה מצב. אפשר לבנות בלי הגדרות נוספות לתמונות המצב של VNDK.

דוגמה: שדרוג קובץ האימג' של המערכת בלבד

צריך לכלול את קובץ ה-snapshot של VNDK ואת קובצי התצורה של מרחב השמות של ה-linker עבור קובץ האימג' של הספק בתמונת המערכת. קובצי התצורה של מרחב השמות של ה-linker מוגדרים באופן אוטומטי לחיפוש ספריות VNDK ב-/system/lib[64]/vndk-${VER} וב-/system/lib[64]/vndk-sp-${VER}.

איור 1. שדרוג המערכת בלבד

דוגמה: שדרוג של קובץ אימג' של מערכת, שינוי קטן בקובץ אימג' של הספק

עדיין אין תמיכה ביצירת קובץ אימג' של ספק מתוך קובץ snapshot של VNDK, לכן צריך ליצור את קובץ האימג' של הספק בנפרד עם קוד המקור המקורי שלו, ואז לשדרג את קובץ האימג' של המערכת כפי שמתואר בדוגמה הקודמת.

הארכיטקטורה של קובצי snapshot ב-VNDK

כדי שתמונת המערכת של Android 9 תהיה תואמת לתמונת המערכת של Android 8.1 של הספק, צריך לספק את קובץ ה-snapshot של VNDK שתואם לתמונת המערכת של Android 8.1 של הספק יחד עם תמונת המערכת של Android 9, כפי שמתואר בהמשך:

איור 2. ארכיטקטורת קובץ snapshot של VNDK

העיצוב של קובץ snapshot ב-VNDK כולל את השיטות הבאות:

  • יצירת קובץ snapshot לספריות VNDK-core ו-VNDK-SP. Android 9 כולל סקריפט שאפשר להשתמש בו כדי ליצור קובץ snapshot של build הנוכחי של VNDK. הסקריפט הזה מקבצ את כל הספריות ב-/system/lib[64]/vndk-28 וב-/system/lib[64]/vndk-sp-28 שנוצרו מהמקור הנוכחי כקובץ snapshot של VNDK, כאשר 28 היא גרסת VNDK של Android 9. קובץ snapshot כולל גם את קובצי התצורה של מרחב השמות של ה-linker‏ /etc/ld.config.28.txt,‏ /etc/llndk.libraries.28.txt ו-/etc/vndksp.libraries.28.txt. קובץ ה-snapshot שנוצר ישמש בגרסאות Android חדשות יותר (מ-Android 9 ואילך).
  • התקנה של ספריות VNDK-core ו-VNDK-SP מוכנות מראש מקובץ snapshot. ב-Android 9, קובץ snapshot של VNDK מכיל קבוצה של ספריות VNDK-core שנוצרו מראש וקבוצה של ספריות VNDK-SP, וגם קובצי תצורה של מרחב שמות של קישורים. כשמציינים רשימה של גרסאות קובצי snapshot של VNDK להתקנה, קובצי ה-snapshot של VNDK יותקנו בספריות של קובצי ה-snapshot של VNDK ב-/system/lib[64]/vndk-${VER}, והספריות /system/lib[64]/vndk-sp-${VER} וקובצי התצורה של מרחב השמות של ה-linker של קובצי ה-snapshot של VNDK יותקנו בספרייה /etc בזמן ה-build של קובץ האימג' של המערכת.

ניהול גרסאות של VNDK

לכל גרסה של Android יש קובץ snapshot אחד של VNDK, וגרסת ה-SDK משמשת כגרסת VNDK (כלומר, גרסת VNDK היא מספר שלם, למשל 27 ל-Android 8.1). גרסת VNDK מתוקנת כשגרסת Android מושקת. גרסת VNDK שבה משתמש המחיצה של הספק מאוחסנת באופן אוטומטי במאפיין ro.vndk.version, שאפשר לקרוא אותו בסביבת זמן הריצה. לאחר מכן, הגרסה הזו משמשת לזיהוי גרסת VNDK של הספק בספריות מסוימות, ולזיהוי גרסת קובץ ה-snapshot של VNDK בתצורת מרחב השמות.

פיתוח ספריות VNDK

הפקודה make vndk יוצרת ספריות עם vndk: { enabled: true, … }, כולל יחסי תלות וקובצי תצורה של מרחב שמות. אם הערך של BOARD_VNDK_VERSION := current מוגדר, הספריות האלה נוצרות באמצעות הפקודה make.

מכיוון שב-build הזה לא מתבצעת התקנה של ספריות VNDK מהקובץ ה-snapshot, ספריות VNDK המותקנות לא יציבות מבחינת ABI. עם זאת, כשגרסת Android מושקת, ה-ABI של גרסת VNDK הנוכחית קבוע. בשלב הזה, כל הפרה של ABI היא שגיאת build, ולכן תיקונים לגרסה של Android לא יכולים לשנות את ה-ABI של ספריות VNDK.