ב-Android 11 יש תמיכה בפריטי build של קובצי snapshot של VNDK ובקובצי snapshot של ספקים, שאפשר להשתמש בהם כדי ליצור את vendor.img
ללא קשר לגרסה של Android בעץ המקור. כך אפשר להשתמש בגרסאות מעורבות של קובצי אימג', כמו קובץ אימג' ישן של ספק וקובץ אימג' חדש יותר של מערכת.
אין תמיכה בגרסאות מעורבות של תמונות באפשרויות הבאות:
Android.mk.
מכיוון ש-Soong יוצר את קובץ ה-snapshot של הספק, מודולים שמוגדרים ב-Android.mk
לא מתועדים כקובץ snapshot של הספק (גם אין ערובה לכך שמודולים בבעלות SoC ב-Android.mk
יפעלו).כלי לחיטוי. קובצי snapshot של ספקים ושל VNDK לא תומכים ב-sanitizer, כי צריך ליצור גרסאות נפרדות של sanitizer.
מידע על קובצי snapshot של ספקים
תמונת מצב של ספק היא תמונת מצב בבעלות של יצרן ציוד מקורי. זוהי קבוצה של מודולים מוכנים מראש ב-C++ שמותקנים ב-/vendor
אבל מתוחזקים ב-AOSP. בלי לצלם קובץ snapshot של הספק בגרסה הקודמת של Android, השדרוג לגרסה חדשה של Android עלול לשבש את המחיצה של הספק, כי אפשר להסיר או לשנות מודולים של קובץ snapshot של ספק בלי תאימות ל-API או ל-ABI.
קובץ snapshot של ספק מכיל את המודולים הבאים ב-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 עשויים להיות גם בספריות אחרות. בשלב זה, קובצי snapshot של ספקים לא תומכים בהגדרות כאלה.
יצירת קובצי snapshot של ספקים
אפשר ליצור תמונת מצב של הספק באמצעות הפקודות הבאות.
. build/envsetup.sh
lunch target
m dist vendor-snapshot
הפקודות האלה יוצרות קובץ vendor-$(TARGET_DEVICE).zip
ב-$DIST_DIR
. בדוגמה הבאה מוצג קובץ ZIP של snapshot של ספק:
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
.
התקנת קובצי snapshot של ספקים
כדי להתקין קובץ snapshot של ספק, עוברים לספריית היעד ומשתמשים בפקודות הבאות.
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 של VNDK ותמונת מצב של הספק אפשר ליצור vendor.img
ללא קשר לגרסת Android בעץ המקור. כך אפשר ליצור גרסאות משולבות של תמונות. אחרי שמתקינים את קובץ ה-snapshot של VNDK ואת קובץ ה-snapshot של הספק, מגדירים את BOARD_VNDK_VERSION
לגרסה של הספק. לדוגמה:
# BoardConfig.mk
BOARD_VNDK_VERSION := 29
כשהערך של BOARD_VNDK_VERSION
מוגדר לערך שאינו current
, מערכת ה-build:
- הפעלת מודולים של קובצי snapshot של VNDK ומודולים של קובצי snapshot של ספקים של
BOARD_VNDK_VERSION
. כל מודול snapshot מבטל מודול מקור C++ שיש לו את אותו השם. ro.vndk.version
מוגדר לערךBOARD_VNDK_VERSION
.- התקנה של מודולים של קובצי snapshot של VNDK מ-
BOARD_VNDK_VERSION
עדsystem_ext
.