יצירת תמונות מצב של הספקים

ב-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.