הרחבות VNDK

יצרני מכשירי אנדרואיד משנים את קוד המקור של ספריות AOSP מסיבות שונות. ספקים מסוימים מטמיעים מחדש פונקציות בספריות AOSP כדי להגביר את הביצועים בעוד שספקים אחרים מוסיפים הוקים חדשים, ממשקי 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-Module.
  • מודולי הגדרת-הרחבה (DX-Module) מגדירים פונקציונליות חדשות או שאין להם מקביל ל-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-Module.
    • דוגמה 2. אם ספרייה משותפת ששונתה libjpeg.so מסתמכת רק על ממשקי API אחרים של AOSP, אז זה יהיה UA-Module.
  • שימוש במודולי הרחבה (UX-Module) מסתמכים על כמה פונקציונליות שאינן AOSP ביישומם.
    • דוגמה 1. אם libjpeg.so שונה מסתמך על ספרייה אחרת שאינה AOSP בשם libjpeg_turbo2.so , אז libjpeg.so שהשתנה יהיה UX-Module.
    • דוגמה 2. אם ספק מוסיף פונקציה חדשה ל- libexif.so שהשתנה וה- libjpeg.so שהשתנה משתמש בפונקציה החדשה שנוספה מ- libexif.so , אז libjpeg.so שהשתנה שלו יהיה מודול UX.

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

פונקציות משומשות
רק AOSP (UA) מורחב (UX)
פונקציות מוגדרות רק AOSP (DA) DAUA DAUX
מורחב (DX) DXUA DXUX

מנגנון הרחבה של VNDK

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

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

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