27 মার্চ, 2025 থেকে, আমরা AOSP তৈরি করতে এবং অবদান রাখতে aosp-main
এর পরিবর্তে android-latest-release
ব্যবহার করার পরামর্শ দিচ্ছি। আরও তথ্যের জন্য, AOSP-তে পরিবর্তনগুলি দেখুন।
VNDK সক্ষম করুন
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
ভেন্ডর নেটিভ ডেভেলপমেন্ট কিট (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
অন্তর্ভুক্ত করুন।
এই পৃষ্ঠার কন্টেন্ট ও কোডের নমুনাগুলি Content License-এ বর্ণিত লাইসেন্সের অধীনস্থ। Java এবং OpenJDK হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2025-07-29 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[],null,["# Enable VNDK\n\nThe Vendor Native Development Kit (VNDK) requires several changes to a codebase to separate\nconcerns between vendor and system. Use the following guide to enable VNDK in a vendor/OEM\ncodebase.\n\nBuild system libraries\n----------------------\n\nThe build system contains several types of objects including libraries\n(shared, static, or header) and binaries.\n\n**Figure 1.** Build system libraries.\n\n- `core` libraries are used by the system image, on the system image. These libraries can't be used by `vendor`, `vendor_available`, `vndk`, or `vndk-sp` libraries. \n\n ```carbon\n cc_library {\n name: \"libThatIsCore\",\n ...\n }\n ```\n- `vendor-only` (or `proprietary`) libraries are used by the vendor image, on the vendor image. \n\n ```carbon\n cc_library {\n name: \"libThatIsVendorOnly\",\n proprietary: true,\n # or: vendor: true, # (for things in AOSP)\n ...\n }\n ```\n- `vendor_available` libraries are used by the vendor image, on the vendor image (may contain duplicates of `core`). \n\n ```carbon\n cc_library {\n name: \"libThatIsVendorAvailable\",\n vendor_available: true,\n ...\n }\n ```\n- `vndk` libraries are used by the vendor image, on the system image. \n\n ```carbon\n cc_library {\n name: \"libThatIsVndk\",\n vendor_available: true,\n vndk: {\n enabled: true,\n }\n ...\n }\n ```\n- `vndk-sp` libraries are used by the vendor image, and also by the system image indirectly. \n\n ```carbon\n cc_library {\n name: \"libThatIsVndkSp\",\n vendor_available: true,\n vndk: {\n enabled: true,\n support_system_process: true,\n }\n ...\n }\n ```\n- `llndk` libraries are used by both the system and vendor images. \n\n ```carbon\n cc_library {\n name: \"libThatIsLlndk\",\n llndk: {\n symbol_file: \"libthatisllndk.map.txt\"\n }\n ...\n }\n ```\n\nWhen a lib is marked as `vendor_available:true`, it's built\ntwice:\n\n- Once for platform (and thus installed to `/system/lib`)\n- Once for vendor (and thus installed to `/vendor/lib` or VNDK APEX)\n\nThe vendor versions of libs are built with `-D__ANDROID_VNDK__`.\nPrivate system components that may change significantly in future versions of\nAndroid are disabled with this flag. In addition, different libraries export a\ndifferent set of headers (such as `liblog`). Options specific to a\nvendor variant of a target can be specified in an `Android.bp` file\nin: \n\n```text\ntarget: { vendor: { … } }\n```\n\nEnable VNDK for a codebase\n--------------------------\n\nTo enable the VNDK for a codebase:\n\n1. Determine eligibility by calculating the required sizes of `vendor.img` and `system.img` partitions.\n2. Enable `BOARD_VNDK_VERSION=current`. You can add to `BoardConfig.mk` or build components with it directly (for example, `m -j BOARD_VNDK_VERSION=current `\u003cvar translate=\"no\"\u003eMY-LIB\u003c/var\u003e).\n\nAfter enabling `BOARD_VNDK_VERSION=current`, the build system\nenforces the following dependency and header requirements.\n\n### Manage dependencies\n\nA `vendor` object that depends on a `core` component\nthat doesn't exist in `vndk` or as a `vendor` object\nmust be resolved using one of the following options:\n\n- The dependency can be removed.\n- If the `core` component is owned by `vendor`, it can be marked as `vendor_available` or `vendor`.\n- A change making the core object part of the `vndk` may be upstreamed to Google.\n\nIn addition, if a `core` component has dependencies on a\n`vendor` component, the `vendor` component must be made\ninto a `core` component **or** the dependency must be\nremoved in another way (for example, by removing the dependency or by moving the\ndependency into a `vendor` component).\n\n### Manage headers\n\nGlobal header dependencies must be removed to enable the build system to know\nwhether to build the headers with or without `-D__ANDROID_VNDK__`.\nFor example, libutils headers such as `utils/StrongPointer.h` can\nstill be accessed using the header library\n[`libutils_headers`](https://android.googlesource.com/platform/system/core/+/android16-release/libutils/include/utils).\n\nSome headers (such as `unistd.h`) can no longer be included transitively\nbut can be included locally.\n\nFinally, the public part of `private/android_filesystem_config.h`\nhas been moved to `cutils/android_filesystem_config.h`. To manage\nthese headers, do one of the following:\n\n- Remove the dependency to `private/android_filesystem_config.h` by replacing all `AID_*` macros with [getgrnam](http://man7.org/linux/man-pages/man3/getgrnam.3.html)/ [getpwnam](http://man7.org/linux/man-pages/man3/getpwnam.3.html) calls if possible. For example:\n - `(uid_t)AID_WIFI` becomes `getpwnam(\"wifi\")-\u003epw_uid`.\n - `(gid_t)AID_SDCARD_R` becomes `getgrnam(\"sdcard_r\")-\u003egr_gid`.\n\n For details, refer to [private/android_filesystem_config.h](https://android.googlesource.com/platform/system/core/+/android16-release/libcutils/include/private/android_filesystem_config.h).\n- For hard-coded AIS, include `cutils/android_filesystem_config.h`."]]