برنامه های افزودنی VNDK

سازندگان دستگاه های Android به دلایل مختلف کد منبع کتابخانه های AOSP را تغییر می دهند. برخی از فروشندگان برای تقویت عملکرد ، عملکردهای موجود در کتابخانه های AOSP را دوباره پیاده سازی می کنند در حالی که سایر فروشندگان قلاب های جدید ، API های جدید یا ویژگی های جدید به کتابخانه های AOSP اضافه می کنند. این بخش رهنمودهایی را برای گسترش کتابخانه های AOSP به شکلی ارائه می دهد که باعث شکستن CTS / VTS نشود.

جایگزینی قطره

همه کتابخانه های به اشتراک گذاشته شده اصلاح شده باید با باینری سازگار و جایگزین های افتراقی جایگزین AOSP خود باشند. همه کاربران موجود AOSP باید بتوانند از کتابخانه به اشتراک گذاشته شده اصلاح شده بدون ترکیب مجدد استفاده کنند. این الزام به شرح زیر است:

  • توابع AOSP نباید حذف شوند.
  • اگر چنین ساختارهایی در معرض استفاده کاربران قرار گیرند ، نباید ساختارها تغییر یابد.
  • پیش شرط عملکردها نباید تقویت شود.
  • توابع باید ویژگی های معادل را ارائه دهند.
  • شرایط پس از عملکرد نباید ضعیف شود.

طبقه بندی ماژول توسعه یافته

ماژول ها را بر اساس ویژگی هایی که تعریف و استفاده می کنند طبقه بندی کنید .

توجه : در اینجا به جای API / ABI از توابع استفاده شده است زیرا افزودن قابلیت بدون تغییر API / ABI امکان پذیر است.

بسته به ویژگی های تعریف شده در یک ماژول ، ماژول ها را می توان به ماژول DA و ماژول DX طبقه بندی کرد:

  • ماژول های فقط AOSP (DA-Module) ویژگی های جدیدی را که در نسخه AOSP نبودند تعریف نمی کنند.
    • مثال 1. کتابخانه دست نخورده AOSP یک ماژول DA است.
    • مثال 2. اگر یک فروشنده توابع موجود در libcrypto.so با دستورالعمل های SIMD بازنویسی کند (بدون افزودن توابع جدید) ، libcrypto.so تغییر یافته یک ماژول DA خواهد بود.
  • ماژول های تعریف-توسعه دهنده (DX-Module) یا ویژگی های جدیدی را تعریف می کنند یا همتای AOSP ندارند.
    • مثال 1. اگر یک فروشنده برای دستیابی به برخی از داده های داخلی یک تابع کمکی به libjpeg.so اضافه کند ، libjpeg.so اصلاح شده یک DX-Lib خواهد بود و تابع جدیداً اضافه شده قسمت گسترده کتابخانه خواهد بود.
    • مثال 2. اگر یک فروشنده کتابخانه ای غیر AOSP به نام libfoo.so ، libfoo.so یک DX-Lib خواهد بود.

بسته به ویژگی های استفاده شده توسط یک ماژول ، ماژول ها را می توان به ماژول UA و ماژول UX طبقه بندی کرد.

  • ماژول های فقط با استفاده از AOSP (ماژول UA) فقط از ویژگی های AOSP در پیاده سازی های خود استفاده می کنند. آنها به هیچ پسوند غیر AOSP اعتماد نمی کنند.
    • مثال 1. یک کتابخانه دست نخورده AOSP یک ماژول UA است.
    • مثال 2. اگر یک کتابخانه اشتراکی اصلاح شده libjpeg.so فقط به سایر API های AOSP متکی باشد ، آن یک ماژول UA خواهد بود.
  • ماژول های با استفاده از Extension (ماژول UX) در پیاده سازی خود به برخی از قابلیت های غیر AOSP متکی هستند.
    • مثال 1. اگر یک libjpeg.so اصلاح شده به کتابخانه غیر AOSP دیگری به نام libjpeg_turbo2.so ، libjpeg.so اصلاح شده یک ماژول UX خواهد بود.
    • به عنوان مثال 2. اگر یک فروشنده می افزاید: یک تابع جدید برای اصلاح شده خود را libexif.so و اصلاح شده خود را libjpeg.so با استفاده از تابع به تازگی اضافه شده از libexif.so ، پس از آن اصلاح شده خود را libjpeg.so خواهد بود UX-ماژول.

تعاریف و کاربردها از یکدیگر مستقل هستند:

عملکردهای استفاده شده
فقط AOSP (UA) تمدید شده (UX)
عملکردهای تعریف شده فقط AOSP (DA) DAUA DAUX
Extended (DX) DXUA DXUX

مکانیسم گسترش VNDK

ماژول های فروشنده ای که به قابلیت های گسترده متکی هستند کار نمی کنند زیرا کتابخانه AOSP با همان نام از قابلیت توسعه یافته برخوردار نیست. اگر ماژول های فروشنده به طور مستقیم یا غیرمستقیم به قابلیت های گسترده بستگی دارند ، فروشندگان باید کتابخانه های مشترک DAUX ، DXUA و DXUX را در پارتیشن فروشنده کپی کنند (فرآیندهای فروشنده همیشه ابتدا به دنبال کتابخانه های مشترک در پارتیشن فروشنده هستند). با این حال ، کتابخانه های LL-NDK نباید کپی شوند ، بنابراین ماژول های فروشنده نباید به ویژگی های گسترده تعریف شده توسط کتابخانه های اصلاح شده LL-NDK اعتماد کنند.

اگر کتابخانه AOSP مربوطه بتواند همان عملکرد را فراهم کند ، کتابخانه های مشترک DAUA می توانند در پارتیشن سیستم باقی بمانند و وقتی پارتیشن سیستم توسط تصویر عمومی سیستم (GSI) رونویسی شود ، ماژول های فروشنده به کار خود ادامه می دهند.

جایگزینی رها کردن از اهمیت برخوردار است زیرا کتابخانه های VNDK اصلاح نشده در GSI با کتابخانه های اشتراکی اصلاح شده در برخورد با نام پیوند می یابند. اگر کتابخانه های AOSP به روشی ناسازگار با API / ABI اصلاح شوند ، ممکن است کتابخانه های AOSP در GSI قادر به پیوند یا ایجاد رفتارهای تعریف نشده باشند.