طراحی عکس فوری VNDK

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

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

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

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

هسته VNDK

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

برای گنجاندن یک کتابخانه در 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 پایدار باشند تا نسخه‌های قدیمی ماژول‌های فروشنده بتوانند از نسخه‌های جدید کتابخانه‌های LL-NDK استفاده کنند. به دلیل ویژگی‌های پایدار ABI LL-NDK، عکس فوری VNDK نیازی به گنجاندن کتابخانه‌های LL-NDK برای تصاویر فروشنده قدیمی ندارد.

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

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

با شروع اندروید 9، نسخه‌های جدید اندروید شامل حداقل یک عکس فوری از فهرست‌های VNDK-core و VNDK-SP برای نسخه‌های قدیمی‌تر در کد منبع اندروید خواهد بود. در زمان ساخت، عکس‌های فوری مورد نیاز در /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} پیکربندی می‌شوند.

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

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

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

معماری عکس فوری VNDK

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

شکل 2. معماری عکس فوری VNDK

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

  • ایجاد یک عکس فوری برای کتابخانه های VNDK-core و VNDK-SP . اندروید 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 است. عکس فوری تولید شده با نسخه های جدیدتر اندروید (بالاتر از اندروید 9) استفاده خواهد شد.
  • نصب کتابخانه های از پیش ساخته شده VNDK-core و VNDK-SP از یک عکس فوری . در اندروید 9، یک عکس فوری VNDK دارای مجموعه ای از کتابخانه های هسته VNDK از پیش ساخته شده و مجموعه ای از کتابخانه های VNDK-SP و همچنین فایل های پیکربندی فضای نام پیوند دهنده است. وقتی فهرستی از نسخه‌های عکس فوری VNDK برای نصب ارائه می‌کنید، در زمان ساخت، تصویر سیستم کتابخانه‌های عکس فوری VNDK را در /system/lib[64]/vndk-${VER} و /system/lib[64]/vndk-sp-${VER} نصب می‌کند. دایرکتوری‌های /system/lib[64]/vndk-sp-${VER} و فایل‌های پیکربندی فضای نام پیوند دهنده برای آن عکس‌های فوری VNDK به دایرکتوری /etc .

نسخه VNDK

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

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

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

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