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

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

עיצוב תמונת מצב של VNDK כולל שיטות שיוצרת יוצר מראש תמונת מצב של VNDK מתמונת המערכת הנוכחית, התקנה הקישורים האלה מראש למחיצת המערכת של גרסת Android חדשה יותר.

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

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

ליבת VNDK

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

כדי לכלול ספרייה בליבה של VNDK, צריך להוסיף את הפרטים הבאים אל 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, תמונת המצב של VNDK לא צריכה לכלול ספריות LL-NDK לתמונות ישנות של ספק.

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

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

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

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

דוגמה: שדרוג מערכת וספק תמונות

לא נדרשת תמונת מצב; build ללא הגדרות נוספות של VNDK קובצי snapshot.

דוגמה: שדרוג תמונת המערכת בלבד

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

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

דוגמה: שדרוג תמונת המערכת, שינוי קל בתמונה של הספק

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

ארכיטקטורת תמונת מצב של VNDK

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

איור 2. ארכיטקטורת תמונת מצב של VNDK

עיצוב תמונת המצב של VNDK כולל את השיטות הבאות:

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

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

כל גרסת Android כוללת רק תמונת מצב אחת של VNDK, וגרסת ה-SDK משמשת בתור גרסת VNDK (כלומר, הגרסה של VNDK כוללת מספר שלם, כמו 27 עבור Android 8.1). גרסת VNDK מתוקנת כשגרסת Android שוחרר. גרסת ה-VNDK שמשמשת את מחיצת הספק מאוחסנת באופן אוטומטי בנכס ro.vndk.version, שיכול לקרוא בזמן ריצה. הגרסה הזו משמשת לזיהוי גרסת ה-VNDK של הספק עבור ספריות מסוימות וזיהוי גרסת תמונת המצב של 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.