VNDK স্ন্যাপশট তৈরি করা

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=user
  • TARGET_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-user
make -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_TOP
    development/vndk/snapshot/build.sh
  • একটি নির্দিষ্ট TARGET_ARCH তৈরি করতে, নিম্নলিখিত কমান্ডগুলি প্রয়োগ করুন।
    lunch aosp_TARGET_ARCH-user
    m -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) ডিরেক্টরি স্ট্রাকচার দেখানো হয়েছে।

VNDK স্ন্যাপশট ডিরেক্টরি স্ট্রাকচার
ছবি ১. VNDK স্ন্যাপশট ডিরেক্টরি স্ট্রাকচার (উদাহরণ)

ভেন্ডর স্ন্যাপশটের জন্য তৈরি করা

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-এ সংশ্লিষ্ট প্রপার্টি সঠিকভাবে পূরণ করে। এই স্ক্রিপ্ট নিম্নলিখিত টাস্কগুলি সম্পাদন করে:

  1. /prebuilts/vndk/vVER-এ, নতুন Git ব্রাঞ্চ তৈরি করতে repo start ব্যবহার করে।
  2. VNDK স্ন্যাপশট বিল্ড আর্টিফ্যাক্ট ফেচ করে এবং আনজিপ করে।
  3. বিল্ড ফাইল অটোমেটিক তৈরি করতে gen_buildfiles.py রান করে (Android.bp)।
  4. জেনারেল পাবলিক লাইসেন্সের (GPL) অধীনে লাইসেন্সপ্রাপ্ত প্রি-বিল্ট লাইব্রেরিগুলির বর্তমান সোর্স ট্রিতে সোর্স রিলিজ করা হয়েছে কিনা তা যাচাই করতে check_gpl_license.py রান করে।
  5. নতুন পরিবর্তন কমিট করতে 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.