طراحی عکس آنی VNDK

تصاویر فوری VNDK را می‌توان در تصویر سیستم استفاده کرد تا کتابخانه‌های VNDK صحیح را به تصاویر فروشنده ارائه دهد، حتی زمانی که تصاویر سیستم و فروشنده از نسخه‌های مختلف Android ساخته شده باشند. برای ایجاد کردن تصویر لحظه‌ای VNDK باید کتابخانه‌های VNDK را به‌صورت تصویر لحظه‌ای ضبط کنید و آن‌ها را با شماره نسخه علامت‌گذاری کنید. تصویر فروشنده ممکن است با نسخه خاصی از VNDK پیوند داشته باشد که ABIهای موردنیاز را برای واحدهای تصویر فروشنده ارائه می‌دهد. بااین‌حال، در یک نسخه VNDK، کتابخانه‌های VNDK باید پایدار ABI باشند.

طراحی چسبان VNDK شامل روش‌هایی برای تولید پیش‌ساخت‌های چسبان VNDK از تصویر سیستم فعلی و نصب آن کتابخانه‌های پیش‌ساخته در پارتیشن سیستم نسخه جدیدتر Android است.

درباره کتابخانه‌های VNDK

HIDL-HALs که در Android 8.0 معرفی شد، امکان ارتقای جداگانه برای پارتیشن‌های سیستم و فروشنده را فراهم می‌کند. VNDK مجموعه‌هایی از کتابخانه‌ها (VNDK-core،‏ VNDK-SP، و LL-NDK) را تعریف می‌کند که کد فروشنده می‌تواند به آن‌ها پیوند دهد و فروشندگان را از استفاده از کتابخانه‌هایی که در مجموعه VNDK نیستند منع می‌کند. درنتیجه، اگر مجموعه‌های VNDK مناسب در تصویر سیستم به تصویر فروشنده ارائه شود، تصویر فروشنده می‌تواند ساخته و اجرا شود.

VNDK-core

مجموعه کتابخانه‌های اصلی VNDK در /system/lib[64]/vndk-${VER} نصب می‌شود و فقط برای فرایندهای فروشنده با سطح API برابر با ${VER} دردسترس است. فرایندهای سیستم نباید از این کتابخانه‌ها استفاده کنند و باید به‌جای آن از کتابخانه‌های نصب‌شده در /system/lib[64] استفاده کنند. به‌دلیل محدودیت فضای نام سخت‌گیرانه برای هر فرایند، کتابخانه‌های VNDK-core از بارگیری دوگانه ایمن هستند.

برای گنجاندن کتابخانه در VNDK-core، موارد زیر را به Android.bp اضافه کنید:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

کتابخانه‌های VNDK-SP در /system/lib[64]/vndk-sp-${VER} نصب شده‌اند و برای فرایندهای فروشنده و فرایندهای سیستم (ازطریق کتابخانه‌های SP-HAL نصب‌شده در بخش فروشنده) دردسترس هستند. کتابخانه‌های VNDK-SP ممکن است دوگانه بار شوند.

برای افزودن کتابخانه به VNDK-SP، موارد زیر را به Android.bp اضافه کنید:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

کتابخانه‌های LL-NDK در /system/lib[64] نصب شده است. ماژول‌های فروشنده می‌توانند از کتابخانه‌های تهی LL-NDK برای دسترسی به نمادهای ازپیش انتخاب‌شده کتابخانه‌های LL-NDK استفاده کنند. کتابخانه‌های LL-NDK باید با نسخه‌های قدیمی سازگار باشند و ABI-stable باشند تا نسخه‌های قدیمی واحدهای فروشنده بتوانند از نسخه‌های جدید کتابخانه‌های LL-NDK استفاده کنند. به‌دلیل ویژگی‌های پایدار ABI در LL-NDK، نمای فوری VNDK نیازی ندارد کتابخانه‌های LL-NDK را برای تصاویر فروشنده قدیمی دربر بگیرد.

درباره عکس‌های آنی VNDK

Android 8.1 شامل کتابخانه‌های VNDK ساخته‌شده از کد منبع بود. بااین‌حال، برای نسخه‌های جدیدتر Android، هر نسخه VNDK باید به‌عنوان یک لحظه‌نگار ضبط شود و به‌عنوان یک پیش‌ساخت برای فعال کردن پیوند به تصویر فروشنده قدیمی‌تر ارائه شود.

از Android 9، نسخه‌های جدید Android حداقل یک نمای فوری از دایرکتوری‌های VNDK-core و VNDK-SP برای نسخه‌های قدیمی‌تر در کد منبع Android خواهد داشت. در زمان ساخت، نماگرفت‌های موردنیاز در /system/lib[64]/vndk-${VER} و /system/lib[64]/vndk-sp-${VER} (پوشه‌هایی که می‌توانند توسط پارتیشن فروشنده استفاده شوند) نصب خواهند شد، که در آن ${VER} متغیر رشته‌ای است که نام نسخه نماگرفت VNDK را نشان می‌دهد.

ازآنجایی‌که کتابخانه‌های عکس آنی VNDK ممکن است برای هر نسخه VNDK متفاوت باشد، عکس آنی VNDK همچنین شامل پیکربندی‌های فضای نام پیونددهنده است که به‌صورت etc/ld.config.${VER}.txt، /etc/llndk.libraries.${VER}.txt، و /etc/vndksp.libraries.${VER}.txt نصب شده‌اند.

مثال: ارتقا سیستم و تصاویر فروشنده

به عکس آنی نیاز نیست؛ بدون پیکربندی‌های اضافی برای عکس‌های آنی VNDK بسازید.

مثال: فقط ارتقا دادن تصویر سیستم

باید شامل فایل‌های پیکربندی فضای نام پیونددهنده و تصویر فوری VNDK برای تصویر فروشنده در تصویر سیستم باشد. فایل‌های پیکربندی فضای نام پیونددهنده به‌طور خودکار پیکربندی می‌شوند تا کتابخانه‌های VNDK را در /system/lib[64]/vndk-${VER} و /system/lib[64]/vndk-sp-${VER} جستجو کنند.

شکل ۱. فقط ارتقای سیستم

مثال: ارتقا دادن تصویر سیستم، تغییر جزئی تصویر فروشنده

ساختن تصویر فروشنده دربرابر تصویر فوری VNDK هنوز پشتیبانی نمی‌شود، بنابراین باید تصویر فروشنده را به‌طور جداگانه با کد منبع اصلی آن بسازید، سپس تصویر سیستم را همان‌طور که در مثال قبلی توضیح داده شد ارتقا دهید.

معماری عکس آنی VNDK

برای سازگار کردن تصویر سیستم Android 9 با تصویر فروشنده Android 8.1، همان‌طور که در زیر نشان داده شده است، تصویر فوری VNDK که با تصویر فروشنده Android 8.1 مطابقت دارد باید همراه با تصویر سیستم Android 9 ارائه شود:

شکل ۲. معماری تصویر آنی VNDK

طراحی عکس آنی VNDK شامل روش‌های زیر است:

  • درحال تولید کردن لحظه‌ای برای کتابخانه‌های VNDK-core و VNDK-SP. Android 9 شامل اسکریپتی است که می‌توانید از آن برای ایجاد عکس آنی از ساخت VNDK فعلی استفاده کنید. این اسکریپت همه کتابخانه‌ها را در /system/lib[64]/vndk-28 و /system/lib[64]/vndk-sp-28 که با منبع فعلی به‌عنوان عکس آنی VNDK ساخته شده‌اند، دسته‌بندی می‌کند، که در آن 28 نسخه VNDK از Android 9 است. عکس آنی همچنین شامل فایل‌های پیکربندی فضای نام پیونددهنده /etc/ld.config.28.txt، /etc/llndk.libraries.28.txt، و /etc/vndksp.libraries.28.txt است. از عکس آنی تولیدشده با نسخه‌های جدیدتر Android (بالاتر از Android 9) استفاده خواهد شد.
  • درحال نصب کتابخانه‌های VNDK-core و VNDK-SP از پیش‌ساخته‌شده از یک نمونه فوری. در Android 9، یک تصویر فوری VNDK شامل مجموعه‌ای از کتابخانه‌های پیش‌ساخته VNDK-core و مجموعه‌ای از کتابخانه‌های VNDK-SP، و همچنین فایل‌های پیکربندی فضای نام پیونددهنده است. وقتی فهرستی از نسخه‌های لحظه‌ای VNDK برای نصب ارائه می‌کنید، در زمان ساخت، تصویر سیستم کتابخانه‌های لحظه‌ای VNDK را در /system/lib[64]/vndk-${VER} و فایل‌های پیکربندی فضای نام پیونددهنده و دایرکتوری‌های /system/lib[64]/vndk-sp-${VER} برای آن لحظه‌های VNDK را در دایرکتوری /etc نصب می‌کند.

نسخه‌بندی VNDK

هر نسخه Android فقط یک تصویر فوری VNDK دارد و نسخه SDK به‌عنوان نسخه VNDK استفاده می‌شود (یعنی نسخه VNDK یک عدد صحیح دارد، مثلاً ۲۷ برای Android 8.1). نسخه VNDK هنگام انتشار نسخه Android ثابت می‌شود. نسخه VNDK مورداستفاده بخش فروشنده به‌طور خودکار در ویژگی ro.vndk.version ذخیره می‌شود که در زمان اجرا قابل‌خواندن است. سپس از این نسخه برای شناسایی نسخه VNDK فروشنده برای برخی کتابخانه‌ها و شناسایی نسخه چسبان VNDK برای پیکربندی فضای نام استفاده می‌شود.

ساختن کتابخانه‌های VNDK

فرمان make vndk کتابخانه‌هایی را می‌سازد که vndk: { enabled: true, … } دارند، ازجمله وابستگی‌ها و فایل‌های پیکربندی فضای نام. اگر BOARD_VNDK_VERSION := current تنظیم شده باشد، این کتابخانه‌ها با فرمان make ساخته می‌شوند.

چون این ساخت کتابخانه‌های VNDK را از عکس آنی نصب نمی‌کند، کتابخانه‌های VNDK نصب‌شده ازنظر ABI پایدار نیستند. بااین‌حال، وقتی نسخه Android منتشر می‌شود، ABI برای نسخه فعلی VNDK ثابت می‌شود. در این مرحله، هرگونه شکستگی ABI خطای ساخت است، بنابراین وصله‌های نسخه Android نباید ABI را برای کتابخانه‌های VNDK تغییر دهد.