تولید عکس‌های آنی VNDK

«نمای فوری 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-user
make -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_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 لازم نیست زیرا با نسخه‌های قدیمی سازگار هستند.
    • برای هدف‌های ۶۴ بیتی، هر دو کتابخانه 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) را نشان می‌دهد.

ساختار فهرست راهنمای عکس آنی VNDK
شکل ۱. ساختار دایرکتوری عکس آنی VNDK (نمونه)

ساختن برای تصاویر کلی فروشنده

‫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 تولیدشده به‌طور مناسب تکمیل می‌کند. این دستورگان کارهای زیر را انجام می‌دهد:

  1. در /prebuilts/vndk/vVER، از repo start برای ایجاد شاخه جدید Git استفاده می‌کند.
  2. آرتیفکت‌های ساخت تصویر کلی VNDK را واکشی و از حالت فشرده خارج می‌کند.
  3. ‫gen_buildfiles.py برای تولید خودکار فایل‌های ساخت اجرا می‌شود (Android.bp).
  4. check_gpl_license.py را اجرا می‌کند تا تأیید کند کتابخانه‌های ازپیش‌ساخته‌شده دارای پروانه «پروانه عمومی همگانی» (GPL) منابعی دارند که در درخت منبع فعلی منتشر شده است.
  5. از 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 ذخیره شده است.