اندروید ۱۱ از مصنوعات ساخت اسنپشات VNDK و اسنپشاتهای فروشنده پشتیبانی میکند که میتوانید از آنها برای ساخت vendor.img صرف نظر از نسخه اندروید روی درخت منبع استفاده کنید. این امر امکان ساخت نسخههای ترکیبی از تصاویر، مانند یک فروشنده قدیمیتر و یک تصویر سیستم جدیدتر را فراهم میکند.
نسخههای ترکیبی تصویر برای موارد زیر پشتیبانی نمیشوند.
Android.mk.از آنجا که Soong اسنپشات فروشنده را تولید میکند، ماژولهای تعریفشده درAndroid.mkبه عنوان اسنپشات فروشنده ثبت نمیشوند (همچنین تضمینی برای کارکرد ماژولهای اختصاصی SoC درAndroid.mkوجود ندارد).ضدعفونیکننده. اسنپشاتهای Vendor و 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 ممکن است در دایرکتوریهای دیگر نیز وجود داشته باشند. در حال حاضر، اسنپشاتهای فروشنده از چنین پیکربندیهایی پشتیبانی نمیکنند.
ساخت اسنپشاتهای فروشنده
با استفاده از دستورات زیر، یک snapshot از فروشنده بسازید.
. build/envsetup.shlunch targetm dist vendor-snapshot
این دستورات یک فایل vendor-$(TARGET_DEVICE).zip در $DIST_DIR ایجاد میکنند. مثال زیر یک فایل فشرده snapshot از vendor را نشان میدهد:
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از flagهایinit_rcوvintf_fragmentsاست.
نصب اسنپشاتهای فروشنده
برای نصب یک vendor snapshot، به دایرکتوری مقصد بروید و از دستورات زیر استفاده کنید.
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 را تولید میکند. مثال زیر ساختار دایرکتوری یک snapshot از vendor را نشان میدهد:
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نصب میکند.