ایجاد عکس های فوری VNDK

عکس فوری 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 ) را نشان می دهد.

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

ساختمان برای عکس های فوری فروشنده

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 ایجاد شده پر می کند. این اسکریپت وظایف زیر را انجام می دهد:

  1. در /prebuilts/vndk/v VER ، repo start برای ایجاد شاخه Git جدید استفاده می کند.
  2. مصنوعات ساخت عکس فوری VNDK را واکشی و از حالت فشرده خارج می کند.
  3. برای تولید خودکار فایل های ساخت ( Android.bp ) gen_buildfiles.py را اجرا می کند.
  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 است واکشی می‌کند. 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 ذخیره می شود.