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

Android 11-এ VNDK স্ন্যাপশট বিল্ড আর্টিফ্যাক্ট এবং ভেন্ডর স্ন্যাপশট কাজ করে, যা আপনি সোর্স ট্রিতে Android ভার্সন যাই হোক না কেন, vendor.img বিল্ড করতে ব্যবহার করতে পারবেন। এটি ছবির মিক্সড ভার্সন চালু করে, যেমন পুরনো ভেন্ডর এবং নতুন সিস্টেম ইমেজ।

নিম্নলিখিত ক্ষেত্রে মিক্সড ইমেজ ভার্সন কাজ করে না।

  • Android.mk. কারণ Soong ভেন্ডর স্ন্যাপশট তৈরি করে, তাই Android.mk-এ সংজ্ঞায়িত মডিউলগুলি ভেন্ডর স্ন্যাপশট হিসেবে ক্যাপচার করা হয় না (এছাড়াও, Android.mk-এ SoC-এর মালিকানাধীন মডিউলগুলি কাজ করবে বলে গ্যারান্টি দেওয়া হয় না)।

  • স্যানিটাইজার। ভেন্ডর ও VNDK স্ন্যাপশটে স্যানিটাইজার কাজ করে না, কারণ স্যানিটাইজার ভেরিয়েন্ট আলাদাভাবে তৈরি করতে হয়।

ভেন্ডর স্ন্যাপশট সম্পর্কে

ভেন্ডর স্ন্যাপশট হল OEM-এর মালিকানাধীন স্ন্যাপশট। এটি হল আগে থেকে তৈরি C++ মডিউলের সেট যা /vendor-এ ইনস্টল করা আছে কিন্তু AOSP-তে ম্যানেজ করা হয়। আগের Android ভার্সনের ভেন্ডর স্ন্যাপশট ক্যাপচার না করে, নতুন Android ভার্সনে আপগ্রেড করলে ভেন্ডর পার্টিশন ভেঙে যেতে পারে, কারণ API বা ABI সামঞ্জস্যপূর্ণ না হলে ভেন্ডর স্ন্যাপশট মডিউল সরিয়ে দেওয়া বা পরিবর্তন করা যেতে পারে।

AOSP-তে ভেন্ডর স্ন্যাপশটে নিম্নলিখিত মডিউল থাকে।

  • vendor: true বা vendor_available: true সহ শেয়ার করা, স্ট্যাটিক ও হেডার লাইব্রেরি
  • vendor_available: true সহ VNDK স্ট্যাটিক লাইব্রেরি
  • vendor: true বা vendor_available: true সহ এক্সিকিউটেবল ও অবজেক্ট ফাইল

নিম্নলিখিত ডিরেক্টরির অধীনে থাকা মডিউলগুলিকে SoC-মালিকানাধীন হার্ডওয়্যার কোড হিসেবে বিবেচনা করা হয় এবং সেগুলি উপেক্ষা করা হয়।

  • device/
  • vendor/
  • hardware/,
      ছাড়া
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

এছাড়াও, SoC-মালিকানাধীন হার্ডওয়্যার কোড অন্যান্য ডিরেক্টরিতে থাকতে পারে। এই মুহূর্তে, ভেন্ডর স্ন্যাপশট এই ধরনের কনফিগারেশন সমর্থন করে না।

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

নিম্নলিখিত কমান্ড ব্যবহার করে ভেন্ডর স্ন্যাপশট তৈরি করুন।

. build/envsetup.sh
lunch target
m dist vendor-snapshot

এইসব কমান্ড $DIST_DIR-এ vendor-$(TARGET_DEVICE).zip ফাইল তৈরি করে। নিচের উদাহরণে ভেন্ডর স্ন্যাপশট জিপ ফাইল দেখানো হয়েছে:

vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│   ├── binary         -> binary files, *.json files
│   ├── header         -> *.json files
│   ├── object         -> *.o files, *.json files
│   ├── shared         -> *.so files, *.json files
│   └── static         -> *.a files, *.json files
├── arch-arm-armv8-a   -> (arch-arm64-armv8-a)
├── configs            -> *.rc files, *.xml files
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files
  • JSON ফাইলে মডিউলের নাম, এক্সপোর্ট করা ডিরেক্টরি, init_rc ফাইল এবং vintf_fragments ফাইলের মতো ফ্ল্যাগ থাকে।
  • configs ডিরেক্টরিতে .rc ও .xml ফাইল আছে যেগুলি ফ্ল্যাগ init_rc ও vintf_fragments থেকে এসেছে।

ভেন্ডর স্ন্যাপশট ইনস্টল করুন

ভেন্ডর স্ন্যাপশট ইনস্টল করতে, ডেস্টিনেশন ডিরেক্টরিতে নেভিগেট করুন এবং নিম্নলিখিত কমান্ড ব্যবহার করুন।

python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VER

এই কমান্ড /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp তৈরি করে। নিচের উদাহরণে ভেন্ডর স্ন্যাপশটের ডিরেক্টরি স্ট্রাকচার দেখানো হয়েছে:

vendor/vendor name/vendor_snapshot/
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a
│   │   │   ├── binary         -> (prebuilt libs)
│   │   │   ├── object         -> (prebuilt libs)
│   │   │   ├── shared         -> (prebuilt libs)
│   │   │   └── static         -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (same as above)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (snapshot modules)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   └── x86                    -> (same as above)
└── (other vendor versions)    -> (same as above)

ভেন্ডর ছবি তৈরি করা

VNDK স্ন্যাপশট বিল্ড আর্টিফ্যাক্ট এবং ভেন্ডর স্ন্যাপশট ব্যবহার করে, আপনি সোর্স ট্রিতে Android ভার্সন যাই হোক না কেন, vendor.img বিল্ড করতে পারবেন, যার ফলে ছবির মিক্সড ভার্সন তৈরি করা সম্ভব হয়। VNDK স্ন্যাপশট ও ভেন্ডর স্ন্যাপশট ইনস্টল করার পরে, ভেন্ডরের ভার্সনে BOARD_VNDK_VERSION সেট করুন। যেমন:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

BOARD_VNDK_VERSION-এর মান current ছাড়া অন্য কিছু সেট করা থাকলে, বিল্ড সিস্টেম:

  • VNDK স্ন্যাপশট মডিউল এবং BOARD_VNDK_VERSION-এর ভেন্ডর স্ন্যাপশট মডিউল চালু করে। প্রতিটি স্ন্যাপশট মডিউল একই নামের C++ সোর্স মডিউলকে ওভাররাইড করে।
  • ro.vndk.version-কে BOARD_VNDK_VERSION হিসেবে সেট করে।
  • BOARD_VNDK_VERSION থেকে system_ext-এ VNDK স্ন্যাপশট মডিউল ইনস্টল করে।