«نمای فوری VNDK» مجموعهای از کتابخانههای VNDK-core و VNDK-SP برای نسخه Android است.
فقط درصورتی میتوانید پارتیشن سیستم را ارتقا دهید که system.img
شامل عکس VNDK مربوطه موردنیاز
vendor.img باشد.
نماگرفتهای رسمی VNDK بهطور خودکار در سرور ساخت Android ساخته میشوند
و در /prebuilts/vndk درخت منبع Android بررسی میشوند. برای
اهداف توسعه، میتوانید تصاویر فوری VNDK را بهصورت محلی بسازید. از چشمههای VNDK برای arm، arm64، x86، و x86_64 TARGET_ARCH پشتیبانی میشود.
ساختن عکسهای آنی
سرور ساخت Android بااستفاده از پارامترهای ساخت و دستورات ساخت زیر، آرتیفکتهای ساخت و فایلهای چسبنده VNDK تولید میکند.
ساختن پارامترها
نام هدف ساخت vndk است. پیکربندی هدف ساخت
در زیر نشان داده شده است.
TARGET_PRODUCT |
TARGET_ARCH |
TARGET_ARCH_VARIANT |
|---|---|---|
aosp_arm |
arm |
armv7-a-neon |
aosp_arm64 |
arm64 |
armv8-a |
aosp_x86 |
x86 |
x86 |
aosp_x86_64 |
x86_64 |
x86_64 |
TARGET_PRODUCT=aosp_$(TARGET_ARCH)TARGET_BUILD_VARIANT=user-
TARGET_ARCHهمان «تصویر سیستم عمومی» (GSI) هدفهای آرک (arm،arm64،x86،x86_64) است. TARGET_ARCH_VARIANT. برای نسخه فوری ۲۸ (Android 9) و بالاتر، شامل پیکربندیهای پرطرفدار فهرستشده در بالا میشود.
فرمانهای ساخت
برای عکسهای آنی رسمی، Android 9 و بالاتر
شامل هدف نمونه (vndk) در
vndk.mk است که عکس آنی VNDK را
در $DIST_DIR میسازد و برونبرد میکند. فایل ZIP تصویر لحظهای از قالب
android-vndk-$(TARGET_ARCH).zip استفاده میکند.
برای مثال:
lunch aosp_TARGET_ARCH-usermake -j vndk dist [BOARD_VNDK_VERSION=current]
سرور ساخت Android از دستورگان
build.sh برای ساختن همه طعمهای پشتیبانیشده
با فرمان زیر استفاده میکند.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
عکس آنی VNDK برای نسخه Android از شاخه انتشار آن نسخه تولید میشود.
ساختن بهصورت محلی
درطول توسعه، میتوانید با دستورات زیر، چکنویسهای VNDK را از درخت منبع محلی بسازید.
- برای ساختن همه معماریهای پشتیبانیشده بهطور همزمان، دستورگان ساخت زیر را اجرا کنید
(
build.sh).cd $ANDROID_BUILD_TOPdevelopment/vndk/snapshot/build.sh - برای ساختن
TARGET_ARCHخاص، فرمانهای زیر را اجرا کنید.lunch aosp_TARGET_ARCH-userm -j vndk dist
فایل android-vndk-$(TARGET_ARCH).zip مربوطه در
$DIST_DIR ایجاد میشود.
فایلهای عکس آنی
عکس آنی VNDK شامل فایلهای زیر است.
- گونه فروشنده کتابخانههای مشترک VNDK-core و VNDK-SP.
- کتابخانههای مشترک LL-NDK لازم نیست زیرا با نسخههای قدیمی سازگار هستند.
- برای هدفهای ۶۴ بیتی، هر دو کتابخانه
TARGET_ARCHوTARGET_2ND_ARCHساخته و اضافه میشوند.
- فهرست کتابخانههای VNDK-core، VNDK-SP، LL-NDK، و VNDK-private در
[vndkcore|vndksp|llndk|vndkprivate].libraries.txtقرار دارد. - فایلهای پروانه.
module_paths.txt. مسیرهای واحد را برای همه کتابخانههای VNDK ضبط میکند، که برای بررسی اینکه پروژههای GPL منابع منتشرشده در درخت منبع Android معین دارند لازم است.
برای فایل ZIP تصویر لحظهای VNDK معین،
android-vndk-$(TARGET_ARCH).zip، کتابخانههای پیشساخته VNDK
در فهرستهای راهنمای جداگانهای بهنام
arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) براساس
بیتبودن ABI گروهبندی میشوند. برای مثال، برای android-vndk-arm64.zip، کتابخانههای ۶۴ بیتی
در arch-arm64-armv8-a قرار میگیرند و کتابخانههای ۳۲ بیتی
در arch-arm-armv8-a قرار میگیرند. مثال زیر ساختار
دایرکتوری برای فایل ZIP عکس آنی arm64 (TARGET_ARCH=arm64) VNDK (android-vndk-arm64.zip) را نشان میدهد.
ساختن برای تصاویر کلی فروشنده
Android 11 از
عکسهای آنی
فروشنده پشتیبانی میکند که به شما امکان میدهد vendor.img را بدون توجه به
نسخه Android در درخت منبع بسازید. نماگرفت پیشفرض VNDK حاوی
فایلهای کتابخانه مشترک (.so) است که میتوانند در دستگاهها نصب شوند و
سپس از باینریهای C++ فروشنده در زمان اجرا پیوند داده شوند. برای ساختن دربرابر
آن نمای فوری VNDK، به آرتیفکتهای اضافی مثل فایلهای سرایند و
پرچمهای صادرشده نیاز دارید.
برای تولید چنین آرتیفکتهایی (همراه با تصویر لحظهای VNDK) از درخت منبع محلی، از دستور زیر استفاده کنید.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
این فرمان android-vndk-$(TARGET_ARCH).zip فایل را در
$DIST_DIR ایجاد میکند. مثال زیر یک فایل ZIP عکس آنی VNDK arm64
با مصنوعات ساخت است. فایلهای پررنگشده فایلهایی هستند که بهتازگی به عکس آنی VNDK معمولی اضافه شدهاند (در شکل ۱ نشان داده شده است) و شامل فایلهای JSON (که cflags هر کتابخانه را ذخیره میکنند) و همه فایلهای سرایند صادرشده میشوند.
android-vndk-arm64.zip ├── arch-arm64-armv8-a │ └── shared │ ├── vndk-core -> *.so files, *.json files │ └── vndk-sp -> *.so files, *.json files ├── arch-arm-armv8-a -> (same as arch-arm64-armv8-a) ├── configs -> *.libraries.txt, module_paths.txt, module_names.txt ├── include -> exported header files (*.h, *.hh, etc.) └── NOTICE_FILES -> license txt files
بارگذاری عکسهای آنی VNDK
نماگرفتهای VNDK در درخت منبع در
/prebuilts/vndk/vVER بررسی میشوند، جایی که
VER برابر با نسخه نماگرفت VNDK است
(که از نسخه کیت توسعه نرمافزار نسخه Android مربوطه پیروی میکند). برای
مثال، عکس آنی VNDK در Android 8.1 نسخه ۲۷ است.
از دستور update.py استفاده کنید
برنامه update.py
(/development/vndk/snapshot/update.py) فرایند
افزودن تصویر فوری ازپیشساخته VNDK به درخت منبع را خودکار میکند. بهطور خودکار
ساختمانهای آرتیفکت را شناسایی میکند و ویژگیهای مرتبط را در
Android.bp تولیدشده بهطور مناسب تکمیل میکند. این دستورگان کارهای زیر را انجام میدهد:
- در
/prebuilts/vndk/vVER، ازrepo startبرای ایجاد شاخه جدید Git استفاده میکند. - آرتیفکتهای ساخت تصویر کلی VNDK را واکشی و از حالت فشرده خارج میکند.
-
gen_buildfiles.pyبرای تولید خودکار فایلهای ساخت اجرا میشود (Android.bp). check_gpl_license.pyرا اجرا میکند تا تأیید کند کتابخانههای ازپیشساختهشده دارای پروانه «پروانه عمومی همگانی» (GPL) منابعی دارند که در درخت منبع فعلی منتشر شده است.- از
git commitبرای ثبت تغییرات جدید استفاده میکند.
استفاده از عکسهای آنی VNDK ساختهشده بهصورت محلی
همچنین میتوانید از چرکنویسهای VNDK که بهصورت محلی ساخته شدهاند استفاده کنید. وقتی گزینه --local
مشخص میشود، نوشتار update.py مصنوعات ساختار تصویر فوری VNDK را از
دایرکتوری محلی مشخصشده (بهجای سرور ساختار Android) که فایلهای android-vndk-$(TARGET_ARCH).zip
تولیدشده از development/vndk/snapshot/build.sh را دارد واکشی میکند. با گزینه
--local، دستورگان update.py از بررسی پروانه GPL و
مراحل git commit رد میشود.
نحو:
python update.py VER --local local_path
نمونه دستور برای بهروزرسانی کردن تصویر فوری VNDK در Android 8.1 با
آرتیفکتهای ساخت محلی در /path/to/local/dir:
python update.py 27 --local /path/to/local/dir
ساختار دایرکتوری نمونه از یک تصویر فوری VNDK ساختهشده محلی:
prebuilts/vndk ├── v30 │ ├── arm64 │ │ ├── arch-arm64-armv8-a -> (prebuilt libs) │ │ ├── arch-arm-armv8-a -> (prebuilt libs) │ │ ├── configs -> (config files) │ │ ├── include -> (exported header files) │ │ └── Android.bp -> (VNDK modules with cflags) │ ├── arm -> (same as above) │ ├── x86_64 -> (same as above) │ ├── x86 -> (same as above) │ ├── common │ │ ├── NOTICE_FILES -> (license files) │ │ └── Android.bp -> (license file modules) │ └── Android.bp -> (*.libraries.30.txt modules) └── (other VNDK versions) -> (same as above)
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true ساخته شده باشند، مصنوعات ساخت محلی بهطور خودکار اضافه میشوند.
نصب عکسهای آنی VNDK
تصویر سیستم کتابخانههای عکس آنی VNDK را در زمان ساخت بااستفاده از
اطلاعات موجود در BOARD_VNDK_VERSION،
PRODUCT_EXTRA_VNDK_VERSIONS، و ro.vndk.version نصب میکند.
بااستفاده از یکی از گزینههای زیر میتوانید کنترل کنید کدام تصاویر فوری VNDK از دایرکتوریهای تصویر فوری پیشساخته VNDK
نصب شوند (برای نمونه، /prebuilts/vndk/v29 یا
/prebuilts/vndk/v30).
- گزینه ۱:
BOARD_VNDK_VERSION. از واحدهای لحظهای برای ساختن واحدهای فروشنده فعلی استفاده کنید و فقط واحدهای لحظهای را که برای واحدهای فروشنده لازم است نصب کنید. - گزینه ۲:
PRODUCT_EXTRA_VNDK_VERSIONS. پیمانههای چسبنده VNDK را صرفنظر از پیمانههای فروشنده کنونی نصب کنید. این کار عکسهای فوری VNDK ازپیش ساختهشده فهرستشده درPRODUCT_EXTRA_VNDK_VERSIONSرا بدون پیوند دادن آنها به هیچ واحد دیگری در زمان ساخت نصب میکند.
تنظیم کردن BOARD_VNDK_VERSION
BOARD_VNDK_VERSION نسخه VNDK را نشان میدهد که برای ساختن ماژولهای فروشنده فعلی لازم است. اگر BOARD_VNDK_VERSION نسخه
عکس فوری VNDK دردسترس در دایرکتوری /prebuilts/vndk داشته باشد، عکس فوری VNDK نشاندادهشده در BOARD_VNDK_VERSION نصب میشود. اگر
عکس آنی VNDK در فهرست راهنما دردسترس نباشد، خطای ساخت رخ میدهد.
تعریف BOARD_VNDK_VERSION همچنین امکان نصب واحدهای VNDK را فراهم میکند. واحدهای فروشنده با نسخه عکس VNDK تعریفشده در
BOARD_VNDK_VERSION در زمان ساخت پیوند داده میشوند (این کار واحدهای VNDK فعلی را در منبع سیستم نمیسازد). هنگام بارگیری درخت منبع کامل از مخزن، منابع سیستم و فروشنده براساس نسخه Android یکسان هستند.
تنظیم PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS فهرست نسخههای اضافی VNDK را برای نصب
ارائه میدهد. معمولاً داشتن یک عکس آنی VNDK برای بخش فروشنده فعلی کافی است. بااینحال، در برخی موارد ممکن است لازم باشد چندین عکس آنی را در یک تصویر سیستم بگنجانید. برای مثال، GSI چندین تصویر فوری دارد تا
از نسخههای مختلف فروشنده با یک تصویر سیستم پشتیبانی کند. با تنظیم
PRODUCT_EXTRA_VNDK_VERSIONS، میتوانید واحدهای
نماگرفت VNDK را علاوهبر نسخه VNDK در BOARD_VNDK_VERSION نصب کنید.
اگر PRODUCT_EXTRA_VNDK_VERSIONS فهرست نسخههای خاصی داشته باشد،
سیستم ساخت بهدنبال پیشساختهای فوری از فهرست نسخه در
دایرکتوری prebuilts/vndk میگردد. اگر سیستم ساخت همه عکسهای آنی فهرستشده را پیدا کند، آن فایلهای عکس آنی را در هر VNDK APEX نصب میکند (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER. نسخههای مفقودشده خطای ساخت ایجاد میکنند.
مدولهای VNDK در زمان ساخت با مدولهای فروشنده پیوند ندارند اما اگر مدولهای فروشنده در بخش فروشنده به یکی از نسخههای نصبشده VNDK نیاز داشته باشند، میتوانند در زمان اجرا استفاده شوند. PRODUCT_EXTRA_VNDK_VERSIONS فقط درصورتی معتبر است که BOARD_VNDK_VERSION تعریف شده باشد.
PLATFORM_VNDK_VERSION
PLATFORM_VNDK_VERSION نسخه VNDK را برای واحدهای VNDK
فعلی در منبع سیستم تعریف میکند. مقدار بهطور خودکار تنظیم میشود:
- قبلاز انتشار،
PLATFORM_VNDK_VERSIONرویPLATFORM_VERSION_CODENAMEتنظیم شده است. - در زمان انتشار،
PLATFORM_SDK_VERSIONدرPLATFORM_VNDK_VERSIONکپی میشود.
پساز انتشار نسخه Android، کتابخانههای VNDK کنونی در
VNDK APEX
(/system/apex/com.android.vndk.vVER) نصب میشوند،
که در آن
VER نسخه ذخیرهشده در
PLATFORM_VNDK_VERSION است.
وقتی BOARD_VNDK_VERSION روی current تنظیم شود،
PLATFORM_VNDK_VERSION در ro.vndk.version ذخیره میشود،
درغیراینصورت BOARD_VNDK_VERSION در
ro.vndk.version ذخیره میشود. وقتی Android منتشر میشود، PLATFORM_VNDK_VERSION روی نسخه کیت توسعه نرمافزار تنظیم میشود؛ قبلاز انتشار، نام کد الفبایی Android برای PLATFORM_VNDK_VERSION استفاده میشود.
خلاصه تنظیمات نسخه VNDK
این جدول تنظیمات نسخه VNDK را خلاصه میکند.
| فروشنده ساخت |
نسخه تخته |
SDK Release |
پلاتفرم نسخه |
نسخه دارایی |
نصب دایرکتوری |
|---|---|---|---|---|---|
| پیمانههای VNDK کنونی | current |
قبل | CODE_NAME |
CODE_NAME |
/system/apex/com.android.vndk.vCODE_NAME |
| بعد از | SDK_VER |
SDK_VER |
/system/apex/com.android.vndk.vSDK_VER |
||
| واحدهای عکس آنی ازپیش ساختهشده | VNDK_VERبرای عکس آنی |
قبل یا بعد | CODE_NAMEیا SDK_VER |
VNDK_VER |
/system_ext/apex/com.android.vndk.vVNDK_VER |
- نسخه برد (
BOARD_VNDK_VERSION). نسخه VNDK که واحدهای فروشنده برای ساختن نیاز دارند. اگر واحدهای فروشنده بتوانند با واحدهای سیستم فعلی پیوند برقرار کنند، رویcurrentتنظیم میشود. - نسخه پلاتفرم (
PLATFORM_VNDK_VERSION). نسخه VNDK که درحالحاضر ماژولهای سیستم درحال ساخت آن هستند. فقط وقتی ساخته میشود کهBOARD_VNDK_VERSIONبا مقدار فعلی برابر باشد. - ویژگی نسخه (
ro.vndk.version). ویژگیای که نسخه VNDK موردنیاز برای اجرای باینریها و کتابخانهها در vendor.img را مشخص میکند. درvendor.imgدر/vendor/default.propذخیره شده است.