ה-VNDK דורש מספר שינויים בבסיס קוד כדי להפריד חששות בין ספק למערכת. השתמש במדריך הבא כדי להפעיל את VNDK בבסיס קוד של ספק/OEM.
בניית ספריות מערכת
מערכת ה-build מכילה מספר סוגים של אובייקטים כולל ספריות (משותפות, סטטיות או כותרות) וקבצים בינאריים.
- ספריות
core
משמשות את תמונת המערכת, על תמונת המערכת. ספריות אלו אינן יכולות לשמש את ספריותvendor
,vendor_available
,vndk
, אוvndk-sp
.cc_library { name: "libThatIsCore", ... }
- ספריות
vendor-only
(אוproprietary
) משמשות את תמונת הספק, על תמונת הספק.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
- ספריות
vendor_available
משמשות את תמונת הספק, בתמונת הספק (עשויה להכיל כפילויות שלcore
).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
- ספריות
vndk
משמשות את תמונת הספק, בתמונת המערכת.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
- ספריות
vndk-sp
משמשות את תמונת הספק, וגם את תמונת המערכת בעקיפין.cc_library { name: "libThatIsVndkSp", vendor_available: true, vndk: { enabled: true, support_system_process: true, } ... }
- ספריות
llndk
משמשות הן את המערכת והן את תמונות הספק.cc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
כאשר lib מסומן בתור vendor_available:true
, הוא נבנה פעמיים:
- פעם אחת לפלטפורמה (וכך מותקן ב-
/system/lib
) - פעם אחת עבור הספק (וכך מותקן ב-
/vendor/lib
או VNDK APEX)
גרסאות הספק של libs בנויות עם -D__ANDROID_VNDK__
. רכיבי מערכת פרטיים שעשויים להשתנות באופן משמעותי בגרסאות עתידיות של אנדרואיד מושבתים עם הדגל הזה. בנוסף, ספריות שונות מייצאות קבוצה שונה של כותרות (כגון liblog
). ניתן לציין אפשרויות ספציפיות לגרסה של יעד של ספק בקובץ Android.bp
ב:
target: { vendor: { … } }
הפעלת VNDK עבור בסיס קוד
כדי להפעיל את VNDK עבור בסיס קוד:
- קבע את הזכאות על ידי חישוב הגדלים הנדרשים של מחיצות
vendor.img
ו-system.img
. - אפשר
BOARD_VNDK_VERSION=current
. אתה יכול להוסיף ל-BoardConfig.mk
או לבנות איתו רכיבים ישירות (לדוגמה,m -j BOARD_VNDK_VERSION=current MY-LIB
).
לאחר הפעלת BOARD_VNDK_VERSION=current
, מערכת הבנייה אוכפת את דרישות התלות והכותרת הבאות.
ניהול תלות
יש לפתור אובייקט vendor
שתלוי ברכיב core
שאינו קיים ב- vndk
או vendor
ספק באמצעות אחת מהאפשרויות הבאות:
- ניתן להסיר את התלות.
- אם רכיב
core
נמצא בבעלותvendor
, ניתן לסמן אותוvendor_available
אוvendor
. - שינוי שהופך את אובייקט הליבה לחלק מה-
vndk
עשוי להיות משודר אל Google.
בנוסף, אם לרכיב core
יש תלות ברכיב vendor
, יש להפוך את רכיב vendor
לרכיב core
או שיש להסיר את התלות בדרך אחרת (לדוגמה, על ידי הסרת התלות או על ידי העברת התלות לרכיב vendor
).
ניהול כותרות
יש להסיר תלות כותרת גלובלית כדי לאפשר למערכת הבנייה לדעת אם לבנות את הכותרות עם או בלי -D__ANDROID_VNDK__
. לדוגמה, עדיין ניתן לגשת לכותרות libutils כגון utils/StrongPointer.h
באמצעות ספריית הכותרות libutils_headers
.
כותרות מסוימות (כגון unistd.h
) כבר לא יכולות להיכלל באופן טרנזיטיבי אלא ניתן לכלול אותן באופן מקומי.
לבסוף, החלק הציבורי של private/android_filesystem_config.h
הועבר ל- cutils/android_filesystem_config.h
. כדי לנהל את הכותרות האלה, בצע אחת מהפעולות הבאות:
- הסר את התלות ב-
private/android_filesystem_config.h
על ידי החלפת כל פקודות המאקרוAID_*
בקריאותgetgrnam
/getpwnam
אם אפשר. לדוגמה:-
(uid_t)AID_WIFI
הופך להיותgetpwnam("wifi")->pw_uid
. -
(gid_t)AID_SDCARD_R
הופךgetgrnam("sdcard_r")->gr_gid
.
private/android_filesystem_config.h
. -
- עבור AIS עם קידוד קשיח, כלול
cutils/android_filesystem_config.h
.