Android מגרסה 11 תומך בארטיפקטים של בניית snapshot של VNDK וב-snapshots של ספקים, שאפשר להשתמש בהם כדי לבנות vendor.img
בלי קשר לגרסת Android בעץ המקור. כך אפשר להשתמש בגרסאות מעורבות של תמונות, כמו תמונת מערכת ישנה יותר של ספק ותמונת מערכת חדשה יותר.
אי אפשר להשתמש בגרסאות שונות של תמונות במקרים הבאים.
Android.mk.
מכיוון ש-Soong יוצר את תמונת המצב של הספק, מודולים שמוגדרים ב-Android.mk.
לא נשמרים כתמונת מצב של הספק (גם מודולים קנייניים של SoC ב-Android.mk.
לא מובטחים לפעול).Android.mk
Android.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/interfaces
hardware/libhardware
hardware/libhardware_legacy
יכול להיות שקודי חומרה בבעלות SoC יופיעו גם בספריות אחרות. בשלב הזה, תמונות מצב של ספקים לא תומכות בהגדרות כאלה.
יצירת תמונות מצב של ספקים
יוצרים תמונת מצב של הספק באמצעות הפקודות הבאות.
. build/envsetup.sh
lunch target
m 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
.