ערכת הפיתוח המקורית של הספק (VNDK) דורשת מספר שינויים ב-codebase כדי להפריד בין או בעיות בין הספק למערכת. במדריך הזה מוסבר איך להפעיל VNDK אצל ספק או OEM ב-codebase.
יצירת ספריות מערכת
מערכת ה-build מכילה כמה סוגי אובייקטים, כולל ספריות (משותף, סטטי או כותרת) ובינאריים.
איור 1. ליצור ספריות מערכת.
- ספריות
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__
.
רכיבי מערכת פרטית שעשויים להשתנות באופן משמעותי בגרסאות עתידיות של
מכשירי Android מושבתים עם הדגל הזה. בנוסף, ספריות שונות מייצאות
קבוצה שונה של כותרות (כמו liblog
). אפשרויות ספציפיות לגבי
את הווריאנט של הספק של יעד אפשר לציין בקובץ Android.bp
ב:
target: { vendor: { … } }
הפעלת VNDK ל-codebase
כדי להפעיל את ה-VNDK ל-codebase:
- מצאו את ההתאמה באמצעות חישוב הגדלים הנדרשים של
vendor.img
ו-system.img
מחיצות. - הפעלה של
BOARD_VNDK_VERSION=current
. אפשר להוסיף אלBoardConfig.mk
או לפתח באמצעותו רכיבים ישירות (לדוגמה,m -j BOARD_VNDK_VERSION=current MY-LIB
).
אחרי ההפעלה של BOARD_VNDK_VERSION=current
, מערכת ה-build
אוכף את הדרישות הבאות לגבי התלות והכותרת.
ניהול יחסי התלות
אובייקט vendor
שתלוי ברכיב core
שלא קיים ב-vndk
או כאובייקט vendor
באמצעות אחת מהאפשרויות הבאות:
- ניתן להסיר את התלות.
- אם הרכיב
core
נמצא בבעלותvendor
, הוא יכול יסומנו בתורvendor_available
אוvendor
. - שינוי שמבצע את החלק העיקרי של האובייקט ב-
vndk
עשוי להיות בסטרימינג ל-Google.
בנוסף, אם לרכיב core
יש תלות
הרכיב vendor
, חובה ליצור את הרכיב vendor
לרכיב core
או שהתלות חייבת להיות
יוסרו בדרך אחרת (לדוגמה, על ידי הסרת התלות או על ידי העברת
או תלות ברכיב vendor
).
ניהול הכותרות
צריך להסיר יחסי תלות גלובליים של כותרות כדי לאפשר למערכת ה-build לדעת
האם לבנות את הכותרות עם או בלי -D__ANDROID_VNDK__
.
לדוגמה, כותרות תת-קישורים כמו 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