عکس فوری VNDK مجموعه ای از VNDK-core و VNDK-SP برای نسخه اندروید است. در صورتی که system.img
شامل عکس فوری VNDK مربوطه مورد نیاز vendor.img
باشد، میتوانید فقط پارتیشن سیستم را ارتقا دهید.
عکسهای فوری رسمی VNDK به طور خودکار بر روی سرور ساخت اندروید ساخته میشوند و در /prebuilts/vndk
درخت منبع اندروید بررسی میشوند. برای اهداف توسعه، می توانید عکس های فوری VNDK را به صورت محلی بسازید. عکسهای فوری VNDK برای طعمهای بازو، arm64، x86 و x86_64 TARGET_ARCH
پشتیبانی میشوند.
ساخت عکس های فوری
سرور ساخت اندروید با استفاده از پارامترهای ساخت و دستورات ساخت زیر، آرتیفکتهای ساخت و فایلهای عکس فوری 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
. برای اسنپ شات نسخه 28 (اندروید 9) و بالاتر، شامل پیکربندی های محبوب ذکر شده در بالا است.
دستورات را بسازید
برای عکسهای فوری رسمی، Android 9 و بالاتر شامل یک نمونه هدف ( vndk
) در vndk.mk
است که یک عکس فوری VNDK را به $DIST_DIR
میسازد و خروجی میدهد. فایل ZIP عکس فوری از قالب android-vndk-$(TARGET_ARCH).zip
استفاده می کند. به عنوان مثال:
lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]
سرور ساخت آندروید از اسکریپت build.sh
برای ساخت تمام طعم های آرک پشتیبانی شده با دستور زیر استفاده می کند.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
عکس فوری VNDK برای یک نسخه اندروید از شعبه انتشار آن نسخه تولید می شود.
به صورت محلی بسازید
در طول توسعه، می توانید عکس های فوری VNDK را از یک درخت منبع محلی با دستورات زیر بسازید.
- برای ساختن همه آرک های پشتیبانی شده به طور همزمان، اسکریپت ساخت زیر (
build.sh
) را اجرا کنید.cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- برای ساخت یک
TARGET_ARCH
خاص، دستورات زیر را اجرا کنید.lunch aosp_TARGET_ARCH-user
m -j vndk dist
فایل android-vndk-$(TARGET_ARCH).zip
تحت $DIST_DIR
ایجاد می شود.
فایل های اسنپ شات
یک عکس فوری VNDK شامل فایل های زیر است.
- نوع فروشنده کتابخانه های مشترک VNDK-core و VNDK-SP.
- به برگه های مشترک LL-NDK نیازی نیست زیرا با نسخه قبلی سازگار هستند.
- برای اهداف 64 بیتی، هر دو کتابخانه
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 بر اساس بیت ABI در دایرکتوری های جداگانه ای به نام arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
گروه بندی می شوند. به عنوان مثال، برای android-vndk-arm64.zip
، libs 64 بیتی در زیر arch-arm64-armv8-a
و libs های 32 بیتی در زیر arch-arm-armv8-a
قرار می گیرند. مثال زیر ساختار دایرکتوری یک فایل ZIP عکس فوری arm64 ( TARGET_ARCH=arm64
) VNDK ( android-vndk-arm64.zip
) را نشان می دهد.
ساخت برای عکس های فوری فروشنده
Android 11 از عکسهای فوری فروشنده پشتیبانی میکند، که به شما امکان میدهد بدون توجه به نسخه Android در درخت منبع، vendor.img
بسازید. یک عکس فوری VNDK پیشفرض حاوی فایلهای کتابخانه مشترک ( .so
) است که میتوانند در دستگاهها نصب شوند و سپس از باینریهای C++ فروشنده در زمان اجرا پیوند داده شوند. برای ساختن در برابر آن عکس فوری VNDK، به مصنوعات اضافی مانند فایل های هدر و پرچم های صادر شده نیاز دارید.
برای تولید چنین مصنوعاتی (همراه با عکس فوری VNDK) از یک درخت منبع محلی، از دستور زیر استفاده کنید.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
این دستور فایلهای android-vndk-$(TARGET_ARCH).zip
را در زیر $DIST_DIR
ایجاد میکند. مثال زیر یک فایل ZIP عکس فوری arm64 VNDK با آرتیفکت های ساخت است. فایلهای پررنگ، فایلهایی هستند که به تازگی به عکس فوری VNDK معمولی (نشان داده شده در شکل 1) اضافه شدهاند و شامل فایلهای 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/v VER
بررسی میشوند، جایی که VER
برابر با نسخه عکس فوری VNDK است (که از نسخه SDK نسخه اندروید مربوطه پیروی میکند). به عنوان مثال، عکس فوری اندروید 8.1 VNDK دارای نسخه 27 است.
از اسکریپت update.py استفاده کنید
اسکریپت update.py
( /development/vndk/snapshot/update.py
) فرآیند افزودن یک عکس فوری VNDK از پیش ساخته شده به درخت منبع را خودکار می کند. به طور خودکار مصنوعات ساخت را شناسایی می کند و به طور مناسب ویژگی های مرتبط را در Android.bp
ایجاد شده پر می کند. این اسکریپت وظایف زیر را انجام می دهد:
- در
/prebuilts/vndk/v VER
، ازrepo start
برای ایجاد شاخه Git جدید استفاده می کند. - مصنوعات ساخت عکس فوری VNDK را واکشی و از حالت فشرده خارج می کند.
- برای تولید خودکار فایل های ساخت (
Android.bp
)gen_buildfiles.py
اجرا می کند. -
check_gpl_license.py
را اجرا می کند تا تأیید کند که کتابخانه های از پیش ساخته شده دارای مجوز تحت مجوز عمومی عمومی (GPL) دارای منابع منتشر شده در درخت منبع فعلی هستند. - از
git commit
برای انجام تغییرات جدید استفاده می کند.
از عکس های فوری VNDK ساخته شده محلی استفاده کنید
شما همچنین می توانید از عکس های فوری VNDK ساخته شده محلی استفاده کنید. وقتی گزینه --local
مشخص شد، اسکریپت update.py
مصنوعات ساخت عکس فوری VNDK را از دایرکتوری محلی مشخص شده (به جای سرور ساخت Android) که دارای فایلهای android-vndk-$(TARGET_ARCH).zip
تولید شده از development/vndk/snapshot/build.sh
است واکشی میکند. development/vndk/snapshot/build.sh
. با گزینه --local
، اسکریپت update.py
مراحل بررسی مجوز GPL و git commit
را رد می کند.
نحو:
python update.py VER --local local_path
دستور مثال برای بهروزرسانی عکس فوری Android 8.1 VNDK با آرتیفکتهای ساخت محلی در /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 از پیش ساخته شده (مثلاً /prebuilts/vndk/v29
یا /prebuilts/vndk/v30
) کنترل کنید که کدام عکسهای فوری VNDK نصب شوند.
- گزینه 1:
BOARD_VNDK_VERSION
. از ماژول های عکس فوری برای ساخت ماژول های فروشنده فعلی استفاده کنید و فقط ماژول های عکس فوری را که برای ماژول های فروشنده مورد نیاز است نصب کنید. - گزینه 2:
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 فعلی را در منبع سیستم نمیسازد). هنگام دانلود درخت منبع کامل از یک مخزن، هم منابع سیستم و هم منبع فروشنده بر اساس نسخه اندروید یکسان هستند.
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.v VER
. نسخههای از دست رفته خطای ساخت ایجاد میکنند.
ماژولهای 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.v VER
) نصب میشوند، جایی که VER
نسخه ذخیرهشده در PLATFORM_VNDK_VERSION
است.
هنگامی که BOARD_VNDK_VERSION
روی current
تنظیم می شود، PLATFORM_VNDK_VERSION
در ro.vndk.version
ذخیره می شود، در غیر این صورت BOARD_VNDK_VERSION
در ro.vndk.version
ذخیره می شود. PLATFORM_VNDK_VERSION
روی نسخه SDK تنظیم می شود که Android منتشر شود. قبل از انتشار، از نام کد الفبایی Android برای PLATFORM_VNDK_VERSION
استفاده می شود.
خلاصه تنظیمات نسخه VNDK
جدول تنظیمات نسخه VNDK را خلاصه می کند.
فروشنده ساخت | هیئت مدیره نسخه | SDK رها کنید | پلت فرم نسخه | نسخه اموال | دایرکتوری را نصب کنید |
---|---|---|---|---|---|
ماژول های فعلی VNDK | current | قبل از | CODE_NAME | CODE_NAME | /system/apex/com.android.vndk.v CODE_NAME |
بعد از | SDK_VER | SDK_VER | /system/apex/com.android.vndk.v SDK_VER | ||
ماژول های از پیش ساخته شده عکس فوری | VNDK_VER برای عکس فوری | قبل یا بعد | CODE_NAME یا SDK_VER | VNDK_VER | /system_ext/apex/com.android.vndk.v VNDK_VER |
- نسخه هیئت مدیره (
BOARD_VNDK_VERSION
). نسخه VNDK که ماژول های فروشنده برای ساخت آن نیاز دارند. اگر ماژولهای فروشنده میتوانند با ماژولهای سیستم فعلی پیوند برقرار کنند، رویcurrent
تنظیم کنید. - نسخه پلتفرم (
PLATFORM_VNDK_VERSION
). نسخه VNDK که ماژول های سیستم فعلی در حال ساخت هستند. فقط زمانی ساخته می شود کهBOARD_VNDK_VERSION
برابر جریان باشد. - ویژگی نسخه (
ro.vndk.version
). ویژگی که نسخه VNDK را مشخص می کند که باینری ها و libs در vendor.img برای اجرا نیاز دارند. درvendor.img
در/vendor/default.prop
ذخیره می شود.