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

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