«کیت توسعه بومی فروشنده» (VNDK) برای جدا کردن نگرانیهای بین فروشنده و سیستم، به چندین تغییر در پایگاه کد نیاز دارد. از راهنمای زیر برای فعال کردن VNDK در پایگاه کد فروشنده/سازنده اصلی استفاده کنید.
ساختن کتابخانههای سیستم
سیستم ساخت شامل چندین نوع شیء ازجمله کتابخانهها (مشترک، ایستا، یا سرصفحه) و فایلهای اجرایی است.
شکل ۱. کتابخانههای سیستم را بسازید.
coreکتابخانه توسط تصویر سیستم، در تصویر سیستم استفاده میشود. vendor،vendor_available،vndk، یاvndk-spکتابخانه نمیتوانند از این کتابخانهها استفاده کنند.cc_library { name: "libThatIsCore", ... }
- کتابخانههای
vendor-only(یاproprietary) توسط تصویر فروشنده، در تصویر فروشنده استفاده میشوند.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
vendor_availableکتابخانه توسط تصویر فروشنده استفاده میشود، در تصویر فروشنده (ممکن است حاوی موارد تکراریcoreباشد).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
-
vndkکتابخانه توسط تصویر فروشنده در تصویر سیستم استفاده میشود.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
-
vndk-spکتابخانه توسط تصویر فروشنده و همچنین بهطور غیرمستقیم توسط تصویر سیستم استفاده میشود.cc_library { name: "libThatIsVndkSp", vendor_available: true, vndk: { enabled: true, support_system_process: true, } ... }
-
llndkکتابخانه توسط سیستم و تصاویر فروشنده استفاده میشود.cc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
وقتی کتابخانهای بهعنوان vendor_available:true علامتگذاری میشود،
دو بار ساخته میشود:
- یکبار برای پلاتفرم (و بنابراین در
/system/libنصب شده است) - یکبار برای فروشنده (و بنابراین در
/vendor/libیا VNDK APEX نصب میشود)
نسخههای فروشنده کتابخانهها با -D__ANDROID_VNDK__ ساخته شده است.
اجزای سیستم خصوصی که ممکن است در نسخههای آینده Android بهطور قابلتوجهی تغییر کنند با این پرچم غیرفعال میشوند. علاوهبراین، کتابخانههای مختلف مجموعه متفاوتی از سرایندها (مثل liblog) را صادر میکنند. گزینههای مختص به گونه فروشنده هدف را میتوان در فایل Android.bp در اینجا مشخص کرد:
target: { vendor: { … } }فعال کردن VNDK برای پایگاه کد
برای فعال کردن VNDK برای پایگاه کد:
- با محاسبه اندازههای موردنیاز برای پارتیشنهای
vendor.imgوsystem.img، واجدشرایط بودن را تعیین کنید. BOARD_VNDK_VERSION=currentرا فعال کنید. میتوانید بهBoardConfig.mkاضافه کنید یا مستقیماً با آن مؤلفه بسازید (برای مثال،m -j BOARD_VNDK_VERSION=current MY-LIB).
پساز فعال کردن BOARD_VNDK_VERSION=current، سیستم ساخت
الزامات سرصفحه و وابستگی زیر را اعمال میکند.
مدیریت وابستگیها
شیء vendor که به عنصر core وابسته است
و در vndk یا بهعنوان شیء vendor وجود ندارد
باید بااستفاده از یکی از گزینههای زیر حلوفصل شود:
- وابستگی را میتوان برداشت.
- اگر
coreمتعلق بهvendorباشد، میتواند بهعنوانvendor_availableیاvendorعلامتگذاری شود. - تغییری که شیء اصلی را بخشی از
vndkمیکند ممکن است به Google ارسال شود.
علاوهبراین، اگر یک عنصر core به عنصر vendor وابستگی داشته باشد، عنصر vendor باید به عنصر core تبدیل شود یا وابستگی باید به روش دیگری برداشته شود (برای مثال، با برداشتن وابستگی یا با انتقال وابستگی به عنصر vendor).
مدیریت سرایندها
وابستگیهای سرایند سراسری باید برداشته شود تا سیستم ساخت بتواند بفهمد
سرایندها را با -D__ANDROID_VNDK__ بسازد یا بدون آن.
برای مثال، سرصفحههای libutils مانند utils/StrongPointer.h همچنان میتوانند بااستفاده از کتابخانه سرصفحه libutils_headers دردسترس باشند.
برخیاز سرایندها (مثل unistd.h) دیگر نمیتوانند بهصورت انتقالی اضافه شوند
اما میتوانند بهصورت محلی اضافه شوند.
درنهایت، بخش عمومی private/android_filesystem_config.h
به cutils/android_filesystem_config.h منتقل شد. برای مدیریت
این سرایندها، یکی از این کارها را انجام دهید:
- با جایگزین کردن همه
AID_*کلانها باgetgrnam/getpwnamتماسها درصورت امکان، وابستگی بهprivate/android_filesystem_config.hرا بردارید. برای مثال:-
(uid_t)AID_WIFIبهgetpwnam("wifi")->pw_uidتبدیل میشود. -
(gid_t)AID_SDCARD_Rبهgetgrnam("sdcard_r")->gr_gidتبدیل میشود.
private/android_filesystem_config.hمراجعه کنید. -
- برای AIS سخترمزی،
cutils/android_filesystem_config.hرا اضافه کنید.