ایجاد عکس های فوری فروشنده

اندروید 11 از مصنوعات ساخت عکس فوری VNDK و عکس‌های فوری فروشنده پشتیبانی می‌کند، که می‌توانید بدون در نظر گرفتن نسخه Android در درخت منبع، از آنها برای ساخت 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 بدون توجه به نسخه Android در درخت منبع بسازید و امکان ایجاد نسخه‌های ترکیبی از تصاویر را فراهم می‌کند. پس از نصب عکس فوری VNDK و عکس فوری فروشنده، BOARD_VNDK_VERSION روی نسخه فروشنده تنظیم کنید. مثلا:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

وقتی BOARD_VNDK_VERSION روی مقداری غیر از current تنظیم شود، سیستم ساخت:

  • ماژول‌های عکس فوری VNDK و ماژول‌های عکس فوری فروشنده BOARD_VNDK_VERSION را فعال می‌کند. هر ماژول snapshot یک ماژول منبع C++ را با همین نام لغو می کند.
  • ro.vndk.version روی BOARD_VNDK_VERSION تنظیم می کند.
  • ماژول های عکس فوری VNDK BOARD_VNDK_VERSION را در system_ext نصب می کند.