תוספי VNDK

יצרני מכשירי Android משנים את קוד המקור של ספריות AOSP עבור מסיבות שונות. יש ספקים שמטמיעים מחדש פונקציות בספריות AOSP כדי לשפר את הביצועים בזמן שספקים אחרים מוסיפים הוקים (hooks) חדשים, ממשקי API חדשים או פונקציונליות לספריות AOSP. בקטע הזה מפורטות הנחיות הרחבה של ספריות AOSP באופן שלא ישבית את CTS/VTS.

החלפה בטעות

כל הספריות המשותפות ששונו חייבות להיות תואמות לבינארי. חלופות של גרסה מקבילה שלהם ב-AOSP. כל הפריטים הקיימים למשתמשי AOSP צריכה להיות אפשרות להשתמש בספרייה המשותפת ששונתה בלי של אוספים מחדש. הדרישה הזו מתייחסת לדברים הבאים:

  • אסור להסיר פונקציות AOSP.
  • אין לשנות מבנים אם מבנים כאלה חשופים משתמשים.
  • אסור לחזק את התנאי המקדים של פונקציות.
  • הפונקציות צריכות לספק פונקציות מקבילות.
  • אסור להחליש תנאי לאחר פונקציות.

סיווגים מורחבים של מודולים

לסווג מודולים לפי הפונקציונליות שהם מגדירים שימוש.

הערה: כאן משתמשים בפונקציות במקום API/ABI, כי ניתן להוסיף פונקציונליות בלי לשנות כל API/ABI.

בהתאם לפונקציונליות המוגדרת במודול, ניתן מסווג ל-DA-Module ול-DX-Module:

  • הגדרת מודולים של AOSP בלבד (DA-Module) לא מגדירים ופונקציות שלא היו מקבילות ל-AOSP.
    • דוגמה 1. ספריית AOSP שלא עברה שינויים היא מודול DA.
    • דוגמה 2. אם ספק משכתב את הפונקציות libcrypto.so עם הוראות SIMD (בלי להוסיף חדש) ), אז libcrypto.so שהשתנה יהיה מודול DA.
  • Defining-Extension Modules (DX-Modules) (הגדרת מודולים של תוספים) פונקציונליות אחרת או שאין להם מקבילה ל-AOSP.
    • דוגמה 1. אם ספק מוסיף פונקציית סיוע libjpeg.so כדי לגשת לנתונים פנימיים מסוימים, ואז השינוי libjpeg.so יהיה DX-Lib והפונקציה החדשה שנוספה תהיה בחלק המורחב של הספרייה.
    • דוגמה 2. אם ספק מגדיר ספרייה שאינה AOSP בשם libfoo.so, אז libfoo.so יהיה DX-Lib.

בהתאם לפונקציונליות שמשמשת את המודול, ניתן לסווג מודולים ב-UA-Module וב-UX-Module.

  • במודולים של AOSP בלבד (UA-Module) נעשה שימוש רק בפונקציות AOSP בהטמעות שלהם. הם לא מסתמכים על תוספים שאינם AOSP.
    • דוגמה 1. ספריית AOSP שלא עברה שינויים היא מודול UA.
    • דוגמה 2. אם הספרייה המשותפת שונתה: libjpeg.so יהיה מבוסס רק על ממשקי API אחרים של AOSP, ואז הוא יהיה מודול UA.
  • מודולים של שימוש בתוספים (UX-Module) מסתמכים על חלק מהמודולים שאינם AOSP פונקציונליות בהטמעות שלהם.
    • דוגמה 1. אם libjpeg.so ששוּנה מבוסס על ספרייה אחרת שאינה AOSP בשם libjpeg_turbo2.so, ואז libjpeg.so יהיה מודול UX.
    • דוגמה 2. אם ספק מוסיף פונקציה חדשה לקובץ ששונה libexif.so ו-libjpeg.so שהשתנה משתמשים נוספה פונקציה חדשה מ-libexif.so, ולאחר מכן שונתה libjpeg.so יהיה מודול UX.

ההגדרות והשימושים אינם תלויים זה בזה:

פונקציות שנעשה בהן שימוש
רק AOSP (UA) מורחבת (UX)
פונקציות מוגדרות רק AOSP (DA) משתמשים פעילים ביום משתמשים פעילים ביום
מורחב (DX) DXUA DXUX

מנגנון תוסף VNDK

המודולים של ספקים שמסתמכים על פונקציות מורחבות לא יפעלו כי ספריית AOSP בשם הזה לא כוללת את הפונקציונליות המורחבת. אם המיקום המודולים של ספקים תלויים באופן ישיר או עקיף בפונקציות מורחבות, על הספקים להעתיק לספק את הספריות המשותפות DAUX, DXUA ו-DXUX מחיצה (תהליכי ספק תמיד מחפשים ספריות משותפות ב קטגוריה ראשונה). עם זאת, אין להעתיק ספריות LL-NDK, אסור שהמודולים יסתמכו על הפונקציות המורחבות שהוגדרו על ידי LL-NDK.

ספריות משותפות של DAUA יכולות להישאר במחיצת המערכת אם ספריית AOSP המתאימה יכולה לספק את אותה פונקציונליות ואותה ספק המודולים ממשיכים לפעול כאשר מחיצת המערכת מוחלפת על ידי תמונת מערכת (GSI).

ההחלפה הראשונית חשובה מכיוון שספריות ה-VNDK שלא שונו GSI יקשר לספריות המשותפות ששונו במקרה של התנגשות שמות. אם הספריות של AOSP משתנות באופן שאינו תואם ל-API/ABI, ה-AOSP ספריות ב-GSI עלולות להיכשל או לגרום להתנהגויות לא מוגדרות.