ב-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 של ספקים
יוצרים קובץ 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
.
בדוגמה הבאה מוצג מבנה הספריות של קובץ snapshot של ספק:
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 של ספק, אפשר ליצור את vendor.img
ללא קשר לגרסה של Android בעץ המקור, וכך ליצור גרסאות מעורבות של קובצי אימג'. אחרי התקנת קובץ ה-snapshot של VNDK ושל הספק, מגדירים את 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
.