বিক্রেতার স্ন্যাপশট তৈরি করুন

অ্যান্ড্রয়েড ১১ VNDK স্ন্যাপশট বিল্ড আর্টিফ্যাক্ট এবং ভেন্ডর স্ন্যাপশট সমর্থন করে, যা ব্যবহার করে আপনি সোর্স ট্রিতে থাকা অ্যান্ড্রয়েড সংস্করণ নির্বিশেষে vendor.img তৈরি করতে পারেন। এর ফলে বিভিন্ন সংস্করণের ইমেজ, যেমন একটি পুরোনো ভেন্ডর এবং একটি নতুন সিস্টেম ইমেজ, একসাথে ব্যবহার করা যায়।

নিম্নলিখিতগুলির জন্য মিশ্র ইমেজ সংস্করণ সমর্থিত নয়।

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

  • স্যানিটাইজার। ভেন্ডর এবং VNDK স্ন্যাপশটগুলো স্যানিটাইজার সমর্থন করে না, কারণ স্যানিটাইজারের বিভিন্ন সংস্করণ আলাদাভাবে বিল্ড করতে হয়।

বিক্রেতার স্ন্যাপশট সম্পর্কে

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

একটি ভেন্ডর স্ন্যাপশটে AOSP-তে নিম্নলিখিত মডিউলগুলো রয়েছে।

  • vendor: true অথবা vendor_available: true সহ শেয়ার্ড, স্ট্যাটিক এবং হেডার লাইব্রেরি
  • VNDK স্ট্যাটিক লাইব্রেরি যেখানে vendor_available: true
  • 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 ডিরেক্টরিতে init_rc এবং vintf_fragments ফ্ল্যাগগুলো থেকে আসা .rc এবং .xml ফাইলগুলো থাকে।

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

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

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

এই কমান্ডটি /vendor/ vendor name /vendor_snapshot/v VER /$(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 স্ন্যাপশট বিল্ড আর্টিফ্যাক্ট এবং একটি ভেন্ডর স্ন্যাপশট ব্যবহার করে, আপনি সোর্স ট্রিতে থাকা অ্যান্ড্রয়েড সংস্করণ নির্বিশেষে vendor.img বিল্ড করতে পারেন, যার ফলে ইমেজের মিশ্র সংস্করণ তৈরি করা সম্ভব হয়। VNDK স্ন্যাপশট এবং ভেন্ডর স্ন্যাপশট উভয়ই ইনস্টল করার পরে, BOARD_VNDK_VERSION ভেন্ডরের সংস্করণে সেট করুন। উদাহরণস্বরূপ:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

যখন BOARD_VNDK_VERSION মান current ছাড়া অন্য কিছু সেট করা হয়, তখন বিল্ড সিস্টেমটি:

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