ভেন্ডর নেটিভ ডেভেলপমেন্ট কিট (VNDK) বিক্রেতা এবং সিস্টেমের মধ্যে উদ্বেগ আলাদা করতে একটি কোডবেসে বেশ কিছু পরিবর্তনের প্রয়োজন। একটি বিক্রেতা/OEM কোডবেসে VNDK সক্ষম করতে নিম্নলিখিত নির্দেশিকাটি ব্যবহার করুন৷
সিস্টেম লাইব্রেরি তৈরি করুন
বিল্ড সিস্টেমে লাইব্রেরি (ভাগ করা, স্ট্যাটিক বা হেডার) এবং বাইনারি সহ বিভিন্ন ধরণের অবজেক্ট রয়েছে।
চিত্র 1. সিস্টেম লাইব্রেরি তৈরি করুন।
-
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" } ... }
যখন একটি lib vendor_available:true
হিসাবে চিহ্নিত করা হয়, তখন এটি দুবার নির্মিত হয়:
- একবার প্ল্যাটফর্মের জন্য (এবং এইভাবে
/system/lib
এ ইনস্টল করা হয়েছে) - একবার বিক্রেতার জন্য (এবং এইভাবে
/vendor/lib
বা VNDK APEX এ ইনস্টল করা হয়েছে)
libs-এর বিক্রেতা সংস্করণগুলি -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
এ সরানো হয়েছে। এই শিরোনামগুলি পরিচালনা করতে, নিম্নলিখিতগুলির মধ্যে একটি করুন:
- সম্ভব হলে
getgrnam
/getpwnam
কল দিয়ে সমস্তAID_*
ম্যাক্রো প্রতিস্থাপন করে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
অন্তর্ভুক্ত করুন।