VNDK স্ন্যাপশট হল Android রিলিজের জন্য VNDK-কোর ও VNDK-SP লাইব্রেরির একটি সেট।
system.img
vendor.img-এর প্রয়োজনীয় সংশ্লিষ্ট VNDK স্ন্যাপশট থাকলে তবেই আপনি সিস্টেম পার্টিশন আপগ্রেড করতে পারবেন।
Android বিল্ড সার্ভারে অফিসিয়াল VNDK স্ন্যাপশট অটোমেটিক তৈরি হয়
এবং Android সোর্স ট্রি-এর /prebuilts/vndk-এ চেক-ইন করা হয়। ডেভেলপমেন্টের
উদ্দেশ্যে, আপনি লোকালি VNDK স্ন্যাপশট তৈরি করতে পারবেন। VNDK স্ন্যাপশট arm, arm64, x86 এবং x86_64 TARGET_ARCH ফ্লেভারের জন্য কাজ করে।
স্ন্যাপশট তৈরি করা
Android বিল্ড সার্ভার নিম্নলিখিত বিল্ড প্যারামিটার ও বিল্ড কমান্ড ব্যবহার করে বিল্ড আর্টিফ্যাক্ট ও VNDK স্ন্যাপশট ফাইল জেনারেট করে।
প্যারামিটার তৈরি করা
বিল্ড টার্গেটের নাম হল vndk। নিচে বিল্ড টার্গেট কনফিগারেশন
দেখানো হয়েছে।
TARGET_PRODUCT |
TARGET_ARCH |
TARGET_ARCH_VARIANT |
|---|---|---|
aosp_arm |
arm |
armv7-a-neon |
aosp_arm64 |
arm64 |
armv8-a |
aosp_x86 |
x86 |
x86 |
aosp_x86_64 |
x86_64 |
x86_64 |
TARGET_PRODUCT=aosp_$(TARGET_ARCH)TARGET_BUILD_VARIANT=userTARGET_ARCHহল জেনেরিক সিস্টেম ইমেজ (GSI)-এর মতো টার্গেট আর্কিটেকচার (arm,arm64,x86,x86_64)।TARGET_ARCH_VARIANT. স্ন্যাপশট v28 (Android 9) ও এর পরের যেকোনও ভার্সনের জন্য, উপরে তালিকাভুক্ত জনপ্রিয় কনফিগারেশন অন্তর্ভুক্ত।
বিল্ড কমান্ড
অফিসিয়াল স্ন্যাপশটের জন্য, Android 9 এবং তার পরবর্তী ভার্সনে
vndk.mk-এ একটি স্যাম্পেল টার্গেট (vndk)
অন্তর্ভুক্ত থাকে যা $DIST_DIR-এ VNDK স্ন্যাপশট
তৈরি ও আউটপুট করে। স্ন্যাপশট জিপ ফাইলটি এই ফর্ম্যাট ব্যবহার করে
android-vndk-$(TARGET_ARCH).zip।
যেমন:
lunch aosp_TARGET_ARCH-usermake -j vndk dist [BOARD_VNDK_VERSION=current]
Android বিল্ড সার্ভার, নিম্নলিখিত কমান্ডের মাধ্যমে কাজ করে এমন সবকটি আর্কিটেকচার
ফ্লেভার তৈরি করতে
build.sh স্ক্রিপ্ট ব্যবহার করে।
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
Android ভার্সনের VNDK স্ন্যাপশট সেই ভার্সনের রিলিজ ব্রাঞ্চ থেকে তৈরি করা হয়।
স্থানীয়ভাবে তৈরি করা
ডেভেলপমেন্টের সময়, আপনি নিম্নলিখিত কমান্ডের সাহায্যে লোকাল সোর্স ট্রি থেকে VNDK স্ন্যাপশট তৈরি করতে পারবেন।
- একসাথে কাজ করে এমন সব আর্কিটেকচার তৈরি করতে, নিম্নলিখিত বিল্ড স্ক্রিপ্ট এক্সিকিউট করুন
(
build.sh)।cd $ANDROID_BUILD_TOPdevelopment/vndk/snapshot/build.sh - একটি নির্দিষ্ট
TARGET_ARCHতৈরি করতে, নিম্নলিখিত কমান্ডগুলি প্রয়োগ করুন।lunch aosp_TARGET_ARCH-userm -j vndk dist
$DIST_DIR-এর অধীনে সংশ্লিষ্ট android-vndk-$(TARGET_ARCH).zip ফাইল তৈরি করা হয়।
স্ন্যাপশট ফাইল
VNDK স্ন্যাপশটে নিম্নলিখিত ফাইল থাকে।
- VNDK-core এবং VNDK-SP শেয়ার করা লাইব্রেরির ভেন্ডর ভ্যারিয়েন্ট।
- LL-NDK শেয়ার করা লাইব্রেরি প্রয়োজন নেই কারণ সেগুলি ব্যাকওয়ার্ড মানানসই।
- ৬৪ বিট টার্গেটের জন্য,
TARGET_ARCHএবংTARGET_2ND_ARCHলাইব্রেরি তৈরি ও অন্তর্ভুক্ত করা হয়।
- VNDK-core, VNDK-SP, LL-NDK এবং VNDK-private লাইব্রেরির তালিকা এখানে দেওয়া আছে:
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt - লাইসেন্স ফাইল।
module_paths.txt. সমস্ত VNDK লাইব্রেরির জন্য মডিউল পাথ রেকর্ড করে, যা GPL প্রোজেক্টের সোর্স কোনও নির্দিষ্ট Android সোর্স ট্রিতে রিলিজ করা হয়েছে কিনা তা চেক করার জন্য প্রয়োজন।
প্রদত্ত VNDK স্ন্যাপশট জিপ ফাইলের জন্য,
android-vndk-$(TARGET_ARCH).zip, VNDK প্রি-বিল্ট লাইব্রেরিগুলি
ABI বিটনেস অনুযায়ী
arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) নামে আলাদা ডিরেক্টরিতে
গ্রুপ করা হয়। যেমন, android-vndk-arm64.zip-এর জন্য, ৬৪-বিট লাইব্রেরি
arch-arm64-armv8-a-এর অধীনে এবং ৩২-বিট লাইব্রেরি
arch-arm-armv8-a-এর অধীনে রাখা হয়। নিচের উদাহরণে arm64 (TARGET_ARCH=arm64) VNDK
স্ন্যাপশট ZIP ফাইলের (android-vndk-arm64.zip) ডিরেক্টরি স্ট্রাকচার
দেখানো হয়েছে।
ভেন্ডর স্ন্যাপশটের জন্য তৈরি করা
Android 11-এ
ভেন্ডর
স্ন্যাপশট কাজ করে, যা আপনাকে সোর্স ট্রিতে Android ভার্সন যাই হোক না কেন,
vendor.img তৈরি করতে দেয়। ডিফল্ট VNDK স্ন্যাপশটে শেয়ার করা লাইব্রেরি ফাইল (.so) থাকে যা ডিভাইসে ইনস্টল করা যায় এবং
তারপরে রানটাইমে ভেন্ডর C++ বাইনারি থেকে লিঙ্ক করা হয়।
সেই VNDK স্ন্যাপশটের বিরুদ্ধে
বিল্ড করতে, আপনাকে হেডার ফাইল এবং
এক্সপোর্ট করা ফ্ল্যাগের মতো অতিরিক্ত আর্টিফ্যাক্ট প্রয়োজন।
লোকাল সোর্স ট্রি থেকে এই ধরনের আর্টিফ্যাক্ট (VNDK স্ন্যাপশট সহ) তৈরি করতে, নিম্নলিখিত কমান্ড ব্যবহার করুন।
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
এই কমান্ড $DIST_DIR-এর অধীনে android-vndk-$(TARGET_ARCH).zip ফাইল তৈরি করে।
নিচের উদাহরণটি হল বিল্ড আর্টিফ্যাক্ট সহ arm64 VNDK স্ন্যাপশট ZIP ফাইল
। বোল্ড করা ফাইলগুলি হল সাধারণ VNDK স্ন্যাপশটে (চিত্র ১-এ দেখানো হয়েছে) নতুন যোগ করা ফাইল
এবং এতে JSON ফাইল (যা প্রতিটি লাইব্রেরির cflags স্টোর করে)
এবং সব এক্সপোর্ট করা হেডার ফাইল অন্তর্ভুক্ত থাকে।
android-vndk-arm64.zip ├── arch-arm64-armv8-a │ └── shared │ ├── vndk-core -> *.so files, *.json files │ └── vndk-sp -> *.so files, *.json files ├── arch-arm-armv8-a -> (same as arch-arm64-armv8-a) ├── configs -> *.libraries.txt, module_paths.txt, module_names.txt ├── include -> exported header files (*.h, *.hh, etc.) └── NOTICE_FILES -> license txt files
VNDK স্ন্যাপশট আপলোড করা
VNDK স্ন্যাপশট সোর্স ট্রি-তে চেক করা হয়, যেখানে
/prebuilts/vndk/vVER, যেখানে
VER হল VNDK স্ন্যাপশটের ভার্সনের সমান
(যা সংশ্লিষ্ট Android রিলিজের SDK ভার্সন মেনে চলে)। যেমন, Android 8.1 VNDK স্ন্যাপশটে ভার্সন 27 আছে।
update.py স্ক্রিপ্ট ব্যবহার করা
update.py স্ক্রিপ্ট
(/development/vndk/snapshot/update.py) সোর্স ট্রি-তে আগে থেকে তৈরি VNDK স্ন্যাপশট যোগ করার
প্রসেস অটোমেটিক করে। এটি অটোমেটিক
বিল্ড আর্টিফ্যাক্ট শনাক্ত করে এবং জেনারেট করা Android.bp-এ
সংশ্লিষ্ট প্রপার্টি সঠিকভাবে পূরণ করে। এই স্ক্রিপ্ট নিম্নলিখিত টাস্কগুলি সম্পাদন করে:
/prebuilts/vndk/vVER-এ, নতুন Git ব্রাঞ্চ তৈরি করতেrepo startব্যবহার করে।- VNDK স্ন্যাপশট বিল্ড আর্টিফ্যাক্ট ফেচ করে এবং আনজিপ করে।
- বিল্ড ফাইল অটোমেটিক তৈরি করতে
gen_buildfiles.pyরান করে (Android.bp)। - জেনারেল পাবলিক লাইসেন্সের (GPL) অধীনে লাইসেন্সপ্রাপ্ত প্রি-বিল্ট লাইব্রেরিগুলির বর্তমান সোর্স ট্রিতে সোর্স রিলিজ করা হয়েছে কিনা তা যাচাই করতে
check_gpl_license.pyরান করে। - নতুন পরিবর্তন কমিট করতে
git commitব্যবহার করে।
স্থানীয়ভাবে তৈরি VNDK স্ন্যাপশট ব্যবহার করা
এছাড়াও, আপনি লোকালি বিল্ড করা VNDK স্ন্যাপশট ব্যবহার করতে পারবেন। --local
বিকল্পটি নির্দিষ্ট করা থাকলে, update.py স্ক্রিপ্ট নির্দিষ্ট করা লোকাল ডিরেক্টরি (Android
বিল্ড সার্ভারের পরিবর্তে) থেকে VNDK স্ন্যাপশট
বিল্ড আর্টিফ্যাক্ট ফেচ করে, যেখানে development/vndk/snapshot/build.sh থেকে জেনারেট করা android-vndk-$(TARGET_ARCH).zip ফাইল
থাকে। --local বিকল্পের সাহায্যে, update.py স্ক্রিপ্ট GPL
লাইসেন্স চেকিং এবং git commit ধাপ এড়িয়ে যায়।
সিনট্যাক্স:
python update.py VER --local local_path
/path/to/local/dir-এ লোকাল বিল্ড আর্টিফ্যাক্ট সহ Android 8.1 VNDK স্ন্যাপশট আপডেট করার জন্য কমান্ডের উদাহরণ:
python update.py 27 --local /path/to/local/dir
লোকালভাবে তৈরি VNDK স্ন্যাপশটের ডিরেক্টরি স্ট্রাকচারের উদাহরণ:
prebuilts/vndk ├── v30 │ ├── arm64 │ │ ├── arch-arm64-armv8-a -> (prebuilt libs) │ │ ├── arch-arm-armv8-a -> (prebuilt libs) │ │ ├── configs -> (config files) │ │ ├── include -> (exported header files) │ │ └── Android.bp -> (VNDK modules with cflags) │ ├── arm -> (same as above) │ ├── x86_64 -> (same as above) │ ├── x86 -> (same as above) │ ├── common │ │ ├── NOTICE_FILES -> (license files) │ │ └── Android.bp -> (license file modules) │ └── Android.bp -> (*.libraries.30.txt modules) └── (other VNDK versions) -> (same as above)
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true-এর মাধ্যমে তৈরি করা হলে, লোকাল বিল্ড আর্টিফ্যাক্ট অটোমেটিক যোগ করা হয়।
VNDK স্ন্যাপশট ইনস্টল করা
সিস্টেম ইমেজ বিল্ড করার সময় VNDK স্ন্যাপশট লাইব্রেরি ইনস্টল করে। এর জন্য
BOARD_VNDK_VERSION,
PRODUCT_EXTRA_VNDK_VERSIONS এবং ro.vndk.version-এ থাকা তথ্য ব্যবহার করা হয়।
নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করে, কোন VNDK স্ন্যাপশট প্রি-বিল্ট VNDK
স্ন্যাপশট ডিরেক্টরি (যেমন, /prebuilts/vndk/v29 বা
/prebuilts/vndk/v30) থেকে ইনস্টল করা হবে তা আপনি নিয়ন্ত্রণ করতে পারবেন।
- বিকল্প ১:
BOARD_VNDK_VERSION. বর্তমান ভেন্ডর মডিউল তৈরি করতে স্ন্যাপশট মডিউল ব্যবহার করুন এবং শুধুমাত্র ভেন্ডর মডিউলের জন্য প্রয়োজনীয় স্ন্যাপশট মডিউল ইনস্টল করুন। - বিকল্প ২:
PRODUCT_EXTRA_VNDK_VERSIONS. বর্তমান ভেন্ডর মডিউল যাই হোক না কেন, VNDK স্ন্যাপশট মডিউল ইনস্টল করুন। এটি বিল্ড টাইমে অন্য কোনও মডিউলের সাথে লিঙ্ক না করেইPRODUCT_EXTRA_VNDK_VERSIONS-এ তালিকাভুক্ত আগে থেকে তৈরি VNDK স্ন্যাপশট ইনস্টল করে।
BOARD_VNDK_VERSION সেট করুন
BOARD_VNDK_VERSION বর্তমান ভেন্ডর
মডিউল তৈরি করার জন্য প্রয়োজনীয় VNDK ভার্সন দেখায়। BOARD_VNDK_VERSION-এ /prebuilts/vndk ডিরেক্টরিতে উপলভ্য VNDK স্ন্যাপশট ভার্সন থাকলে, BOARD_VNDK_VERSION-এ উল্লিখিত VNDK স্ন্যাপশট ইনস্টল করা হয়। ডিরেক্টরিতে
VNDK স্ন্যাপশট উপলভ্য না থাকলে, বিল্ড সংক্রান্ত সমস্যা হয়।
BOARD_VNDK_VERSION সংজ্ঞায়িত করলে VNDK মডিউলও ইনস্টল করা
যায়। ভেন্ডর মডিউল বিল্ড করার সময় BOARD_VNDK_VERSION-এ উল্লেখ করা VNDK স্ন্যাপশট ভার্সনের সাথে লিঙ্ক করে (এটি সিস্টেম সোর্সে বর্তমান VNDK মডিউল বিল্ড করে না)। কোনও রিপোজিটরি থেকে সম্পূর্ণ সোর্স ট্রি ডাউনলোড করার সময়,
সিস্টেম ও ভেন্ডর সোর্স, দুটিই একই Android
রিলিজের উপর ভিত্তি করে তৈরি হয়।
PRODUCT_EXTRA_VNDK_VERSIONS সেট করুন
PRODUCT_EXTRA_VNDK_VERSIONS ইনস্টল করার জন্য অতিরিক্ত VNDK ভার্সনের
তালিকা তৈরি করে। সাধারণত, বর্তমান
ভেন্ডর পার্টিশনের জন্য একটি VNDK স্ন্যাপশট থাকলেই চলে। তবে, কিছু ক্ষেত্রে আপনাকে একটি সিস্টেম ইমেজে একাধিক
স্ন্যাপশট অন্তর্ভুক্ত করতে হতে পারে। যেমন, GSI-তে একটি সিস্টেম ইমেজ সহ একাধিক ভেন্ডর ভার্সন
সাপোর্ট করার জন্য একাধিক স্ন্যাপশট আছে। PRODUCT_EXTRA_VNDK_VERSIONS সেট করে, আপনি BOARD_VNDK_VERSION-এ VNDK ভার্সন ছাড়াও VNDK স্ন্যাপশট
মডিউল ইনস্টল করতে পারবেন।
PRODUCT_EXTRA_VNDK_VERSIONS-এ ভার্সনের নির্দিষ্ট তালিকা থাকলে,
বিল্ড সিস্টেম prebuilts/vndk ডিরেক্টরিতে
ভার্সন তালিকার আগে থেকে তৈরি স্ন্যাপশট খোঁজে। বিল্ড সিস্টেম যদি তালিকাভুক্ত সব স্ন্যাপশট
খুঁজে পায়, তাহলে এটি প্রতিটি VNDK APEX-এ সেইসব স্ন্যাপশট ফাইল ইনস্টল করে
(out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER.
ভার্সন না থাকলে বিল্ড এরর তৈরি হয়।
বিল্ড করার সময় VNDK মডিউল ভেন্ডর মডিউলের সাথে লিঙ্ক করা হয় না, তবে রানটাইমে ব্যবহার করা যেতে পারে, যদি ভেন্ডর পার্টিশনে থাকা ভেন্ডর মডিউলের জন্য ইনস্টল করা VNDK ভার্সনের মধ্যে কোনও একটির প্রয়োজন হয়। PRODUCT_EXTRA_VNDK_VERSIONS তখনই বৈধ
যদি BOARD_VNDK_VERSION নির্দিষ্ট করা থাকে।
PLATFORM_VNDK_VERSION
PLATFORM_VNDK_VERSION সিস্টেম সোর্সে বর্তমান VNDK
মডিউলের জন্য VNDK ভার্সন নির্ধারণ করে। ভ্যালু অটোমেটিক সেট করা হয়:
- রিলিজের আগে,
PLATFORM_VNDK_VERSION-কেPLATFORM_VERSION_CODENAMEহিসেবে সেট করা হয়। - রিলিজের সময়,
PLATFORM_SDK_VERSION-এর কন্টেন্টPLATFORM_VNDK_VERSION-এ কপি করা হয়।
Android ভার্সন রিলিজ হওয়ার পরে, বর্তমান VNDK লাইব্রেরি
VNDK APEX-এ ইনস্টল করা হয়
(/system/apex/com.android.vndk.vVER), যেখানে
VER হল
PLATFORM_VNDK_VERSION-এ স্টোর করা ভার্সন।
BOARD_VNDK_VERSION-এর মান current হিসেবে সেট করা থাকলে,
PLATFORM_VNDK_VERSION, ro.vndk.version-এ স্টোর করা হয়,
অন্যথায় BOARD_VNDK_VERSION, ro.vndk.version-এ স্টোর করা হয়। Android রিলিজ করার সময় PLATFORM_VNDK_VERSION-এর জন্য
SDK ভার্সন সেট করা হয়; রিলিজ করার আগে, PLATFORM_VNDK_VERSION-এর জন্য অ্যালফানিউমেরিক Android
কোড নেম ব্যবহার করা হয়।
VNDK ভার্সন সেটিংসের সারসংক্ষেপ
টেবিলে VNDK ভার্সন সেটিংসের সংক্ষিপ্তসার দেওয়া আছে।
| ভেন্ডর বিল্ড |
বোর্ড ভার্সন |
SDK রিলিজ |
প্ল্যাটফর্ম ভার্সন |
ভার্সন প্রপার্টি |
ইনস্টল ডিরেক্টরি |
|---|---|---|---|---|---|
| বর্তমান VNDK মডিউল | current |
আগে | CODE_NAME |
CODE_NAME |
/system/apex/com.android.vndk.vCODE_NAME |
| পরে | SDK_VER |
SDK_VER |
/system/apex/com.android.vndk.vSDK_VER |
||
| আগে থেকে তৈরি স্ন্যাপশট মডিউল | VNDK_VERস্ন্যাপশটের জন্য |
আগে বা পরে | CODE_NAMEঅথবা SDK_VER |
VNDK_VER |
/system_ext/apex/com.android.vndk.vVNDK_VER |
- বোর্ড ভার্সন (
BOARD_VNDK_VERSION)। VNDK ভার্সন যা ভেন্ডর মডিউল তৈরি করার জন্য প্রয়োজন।current-এ সেট করুন যদি ভেন্ডর মডিউল বর্তমান সিস্টেম মডিউলের সাথে লিঙ্ক করতে পারে। - প্ল্যাটফর্ম ভার্সন (
PLATFORM_VNDK_VERSION)। বর্তমান সিস্টেম মডিউল যে VNDK ভার্সন তৈরি করছে। শুধুমাত্র তখনই তৈরি করা হয় যখনBOARD_VNDK_VERSIONবর্তমানের সমান হয়। - ভার্সন প্রপার্টি (
ro.vndk.version)। vendor.img-এর বাইনারি ও লাইব্রেরি চালানোর জন্য প্রয়োজনীয় VNDK ভার্সন নির্দিষ্ট করে এমন প্রপার্টিvendor.img-এ স্টোর করা আছে/vendor/default.prop.