ב-Android 11 יש תמיכה בפריטי build של קובצי snapshot של VNDK ובקובצי snapshot של ספקים, שאפשר להשתמש בהם כדי ליצור את vendor.img
ללא קשר לגרסה של Android בעץ המקור. כך אפשר להשתמש בגרסאות מעורבות של קובצי אימג', כמו קובץ אימג' ישן של ספק וקובץ אימג' חדש יותר של מערכת.
אין תמיכה בגרסאות מעורבות של תמונות באפשרויות הבאות:
Android.mk.
מכיוון ש-Soong יוצר את קובץ ה-snapshot של הספק, מודולים שמוגדרים ב-Android.mk
לא מתועדים כקובץ snapshot של הספק (גם אין ערובה לכך שמודולים בבעלות SoC ב-Android.mk
יפעלו).מכשיר חיטוי קובצי snapshot של ספקים ושל VNDK לא תומכים ב-sanitizer, כי צריך ליצור גרסאות נפרדות של sanitizer.
מידע על תמונות מצב של ספקים
תמונת מצב של ספק היא תמונת מצב בבעלות של יצרן ציוד מקורי. זוהי קבוצה של מודולים מוכנים מראש ב-C++ שמותקנים ב-/vendor
אבל מתוחזקים ב-AOSP. אם לא תצלמו תמונת מצב של הספק בגרסה הקודמת של Android, שדרוג לגרסת Android חדשה עלול לגרום לשיבושים במחיצת הספק, כי אפשר להסיר או לשנות מודולים של snapshot של הספק ללא תאימות 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 עשויים להופיע גם בספריות אחרות. בשלב זה, קובצי snapshot של ספקים לא תומכים בהגדרות כאלה.
יצירת קובצי snapshot של ספקים
יוצרים קובץ snapshot של הספק באמצעות הפקודות הבאות.
. 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
.
התקנת קובצי 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 ואת קובץ ה-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
.