יצרני מכשירי 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.
- דוגמה 1. אם ספק מוסיף פונקציית סיוע
בהתאם לפונקציונליות שמשמשת את המודול, ניתן לסווג מודולים ב-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.
- דוגמה 1. אם
ההגדרות והשימושים אינם תלויים זה בזה:
פונקציות שנעשה בהן שימוש | |||
---|---|---|---|
רק 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 עלולות להיכשל או לגרום להתנהגויות לא מוגדרות.