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

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

גרסאות תמונה מעורבות אינן נתמכות עבור הבאות.

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

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

לגבי צילומי ספק

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

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

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

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

התקנת צילומי ספק

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

python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VER

פקודה זו יוצרת /vendor/ vendor name /vendor_snapshot/v VER /$(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 ותמונת מצב של ספק, אתה יכול לבנות vendor.img ללא קשר לגרסת האנדרואיד בעץ המקור, מה שמאפשר ליצור גרסאות מעורבות של תמונות. לאחר התקנת גם תמונת המצב של VNDK וגם תמונת המצב של הספק, הגדר BOARD_VNDK_VERSION לגרסת הספק. לדוגמה:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

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

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