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

ב-Android 11 יש תמיכה בגרסת build של קובץ snapshot של VNDK ארטיפקטים וקובצי snapshot של ספקים, שבהם אפשר להשתמש כדי ליצור vendor.img גרסת Android בעץ המקור. כך אפשר ליצור גרסאות שונות של תמונות, כמו כספק ישן יותר ותמונת מערכת חדשה יותר.

גרסאות של תמונות משולבות לא נתמכות בגרסאות הבאות.

  • Android.mk. מכיוון ש-Songg יוצר את תמונת המצב של הספק, המודולים מוגדרים Android.mk לא מתועדים כתמונת מצב של הספק (מודולים בבעלות SoC ב- כמו כן, לא בטוח ש-Android.mk יפעל).

  • כלי לחיטוי. תמונות מצב של ספקים ו-VNDK לא תומכות בחומר לחיטוי צריך ליצור וריאציות בנפרד.

מידע על תמונות מצב של ספקים

תמונת מצב של הספק היא תמונת מצב בבעלות ה-OEM. זאת קבוצה של מודולים מוכנים מראש של C++ מותקנת ב-/vendor אבל מתוחזקת ב-AOSP. ללא תיעוד של הספק תמונת מצב של גרסת Android הקודמת, בתהליך שדרוג לגרסת Android חדשה עלולה לקרוס את המחיצה של הספק כי ניתן להסיר מודולים של תמונת מצב של הספק או שונו ללא תאימות 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 של ספקים

אפשר ליצור תמונת מצב של הספק באמצעות הפקודות הבאות.

. 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 של ספקים

כדי להתקין תמונת מצב של הספק, עוברים לספריית היעד ומשתמשים את הפקודות הבאות.

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)

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

שימוש ב-VNDK snapshot build ארטיפקטים ותמונת מצב של הספק, אפשר ליצור את vendor.img ללא קשר ל-Android בעץ המקור, מה שמאפשר ליצור גרסאות משולבות תמונות. אחרי שמתקינים את תמונת המצב של VNDK ואת תמונת המצב של הספק, BOARD_VNDK_VERSION בגרסת הספק. לדוגמה:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

כשמוגדר בשדה BOARD_VNDK_VERSION ערך שאינו current, ה-build מערכת:

  • הפעלת מודולים של תמונת מצב של VNDK ומודולים של תמונת מצב של הספק BOARD_VNDK_VERSION כל מודול תמונת מצב מבטל את מודול המקור של C++ בעלי שם זהה.
  • מגדיר את ro.vndk.version ל-BOARD_VNDK_VERSION.
  • התקנת מודולים של תמונת מצב של VNDK של BOARD_VNDK_VERSION ב-system_ext.