Android מגרסה 11 תומך בארטיפקטים של בניית snapshot של VNDK וב-snapshots של ספקים, שאפשר להשתמש בהם כדי לבנות vendor.img בלי קשר לגרסת Android בעץ המקור. כך אפשר להשתמש בגרסאות מעורבות של תמונות, כמו תמונת מערכת ישנה יותר של ספק ותמונת מערכת חדשה יותר.
אי אפשר להשתמש בגרסאות שונות של תמונות במקרים הבאים.
Android.mk.מכיוון ש-Soong יוצר את תמונת המצב של הספק, מודולים שמוגדרים ב-Android.mk.לא נשמרים כתמונת מצב של הספק (גם מודולים קנייניים של SoC ב-Android.mk.לא מובטחים לפעול).Android.mkAndroid.mkמכשיר חיטוי. תמונות מצב של ספקים ו-VNDK לא תומכות ב-sanitizer, כי צריך ליצור בנפרד וריאציות של sanitizer.
מידע על תמונות מצב של ספקים
תמונת מצב של ספק היא תמונת מצב בבעלות יצרן ציוד מקורי. זהו אוסף של מודולי C++ מוכנים מראש שמותקנים ב-/vendor אבל מתוחזקים ב-AOSP. אם לא מצלמים תמונת מצב של הספק בגרסת Android הקודמת, שדרוג לגרסת Android חדשה עלול לשבור את מחיצת הספק, כי אפשר להסיר או לשנות מודולים של תמונת מצב של הספק בלי תאימות ל-API או ל-ABI.
תמונת מצב של ספק מכילה את המודולים הבאים ב-AOSP.
- ספריות משותפות, סטטיות וספריות כותרות עם
vendor: trueאוvendor_available: true - ספריות סטטיות של VNDK עם
vendor_available: true - קבצים הפעלה וקבצי אובייקט עם
vendor: trueאוvendor_available: true
מודולים בספריות הבאות נחשבים לקוד חומרה בבעלות SoC ולא נלקחים בחשבון.
device/vendor/hardware/, למעטhardware/interfaceshardware/libhardwarehardware/libhardware_legacy
יכול להיות שקודי חומרה בבעלות SoC יופיעו גם בספריות אחרות. בשלב הזה, תמונות מצב של ספקים לא תומכות בהגדרות כאלה.
יצירת תמונות מצב של ספקים
יוצרים תמונת מצב של הספק באמצעות הפקודות הבאות.
. build/envsetup.shlunch targetm dist vendor-snapshot
הפקודות האלה יוצרות קובץ vendor-$(TARGET_DEVICE).zip ב-$DIST_DIR. בדוגמה הבאה מוצג קובץ ZIP של תמונת מצב של ספק:
vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│ ├── binary -> binary files, *.json files
│ ├── header -> *.json files
│ ├── object -> *.o files, *.json files
│ ├── shared -> *.so files, *.json files
│ └── static -> *.a files, *.json files
├── arch-arm-armv8-a -> (arch-arm64-armv8-a)
├── configs -> *.rc files, *.xml files
├── include -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES -> license txt files
- קובצי ה-JSON מכילים דגלים כמו שם המודול, ספריות מיוצאות, קבצים מסוג
init_rcוקבצים מסוגvintf_fragments. - הספרייה
configsמכילה את הקבצים.rcו-.xmlמהדגליםinit_rcו-vintf_fragments.
התקנת תמונות מצב של ספקים
כדי להתקין תמונת מצב של ספק, עוברים לספריית היעד ומשתמשים בפקודות הבאות.
python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
vendor/vendor name/vendor_snapshot VERהפקודה הזו יוצרת את /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp.
בדוגמה הבאה מוצגת מבנה הספריות של תמונת מצב של ספק:
vendor/vendor name/vendor_snapshot/
├── v30
│ ├── arm64
│ │ ├── arch-arm64-armv8-a
│ │ │ ├── binary -> (prebuilt libs)
│ │ │ ├── object -> (prebuilt libs)
│ │ │ ├── shared -> (prebuilt libs)
│ │ │ └── static -> (prebuilt libs)
│ │ ├── arch-arm-armv8-a -> (same as above)
│ │ ├── configs -> (config files)
│ │ ├── include -> (exported header files)
│ │ ├── NOTICE_FILES -> (license files)
│ │ └── Android.bp -> (snapshot modules)
│ ├── arm -> (same as above)
│ ├── x86_64 -> (same as above)
│ └── x86 -> (same as above)
└── (other vendor versions) -> (same as above)
יצירת תמונות של ספקים
באמצעות ארטיפקטים של build של snapshot של VNDK ו-snapshot של ספק, אפשר לבצע build של vendor.img בלי קשר לגרסת Android בעץ המקור, וכך ליצור גרסאות מעורבות של תמונות. אחרי שמתקינים את תמונת המצב של VNDK ואת תמונת המצב של הספק, מגדירים את BOARD_VNDK_VERSION לגרסה של הספק. לדוגמה:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
כשהערך של BOARD_VNDK_VERSION הוא לא current, מערכת ה-build:
- הפעלת מודולים של תמונת מצב של VNDK ומודולים של תמונת מצב של ספקים של
BOARD_VNDK_VERSION. כל מודול של תמונת מצב מבטל מודול מקור של C++ עם אותו שם. - ההגדרה של
ro.vndk.versionהיאBOARD_VNDK_VERSION. - הפקודה מתקינה מודולים של VNDK snapshot של
BOARD_VNDK_VERSIONב-system_ext.