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

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

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

על ספריות VNDK

HIDL-HALs , שהוצגו באנדרואיד 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] . מודולים של ספקים יכולים להשתמש בספריות בדלי LL-NDK כדי לגשת לסמלים שנבחרו מראש של ספריות LL-NDK. ספריות LL-NDK חייבות להיות תואמות לאחור ויציבות ABI כדי לאפשר לגרסאות ישנות של מודולי ספק להשתמש בגרסאות חדשות של ספריות LL-NDK. בגלל המאפיינים היציבים של ABI של LL-NDK, תמונת המצב של VNDK אינה צריכה לכלול ספריות LL-NDK עבור תמונות ישנות של ספקים.

על צילומי VNDK

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

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

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

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

לא נדרשת תמונת מצב; לבנות ללא תצורות נוספות עבור צילומי VNDK.

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

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

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

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

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

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

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

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

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

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

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

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

בניית ספריות VNDK

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

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