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

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