অ্যান্ড্রয়েড ১০ এবং এর পরবর্তী সংস্করণগুলোতে, CTS-on-GSI/VTS কমপ্লায়েন্স টেস্টিং চালানোর জন্য ব্যবহৃত জেনেরিক সিস্টেম ইমেজ (GSI)-কে রিলিজ সাইন করার উদ্দেশ্যে ইউজারডিবাগ থেকে ইউজার বিল্ড টাইপে পরিবর্তন করা হয়েছে। এটি VTS টেস্টিংয়ের জন্য একটি সমস্যা, কারণ VTS চালানোর জন্য adb root প্রয়োজন, কিন্তু ইউজার বিল্ড ডিভাইসে adb root উপলব্ধ থাকে না।
যেসব ইউজার বিল্ড ডিভাইসের বুটলোডার আনলক করা থাকে, সেগুলোতে adb root সক্ষম করার জন্য ডিবাগ র্যামডিস্ক (বা ডিবাগ বুট ইমেজ) চালু করা হয়েছে। এটি CTS-on-GSI এবং VTS-on-GSI-এর জন্য একই ইউজার বিল্ড GSI system.img ব্যবহার করে টেস্টিং প্রক্রিয়াকে সহজ করে তোলে। STS সেটআপের জন্য, অন্য একটি ইউজারডিবাগ OEM system.img ব্যবহার করা এখনও প্রয়োজন।
নিচের সারণিতে অ্যান্ড্রয়েড ১০-এ কমপ্লায়েন্স টেস্টিং-এর জন্য ইমেজ এবং বিল্ড টাইপের পরিবর্তনগুলো দেখানো হলো।
| টেস্ট স্যুট | পরীক্ষা করুন | নির্মাণ করুন | র্যামডিস্ক ডিবাগ করুন | adb রুট? | অ্যান্ড্রয়েড ৯ থেকে ১০ বিল্ড ভ্যারিয়েন্ট পরিবর্তন |
|---|---|---|---|---|---|
| সিটিএস | OEM-এর সিস্টেম | ব্যবহারকারী | এন | এন | কোন পরিবর্তন নেই |
| CTS-on-GSI | জিএসআই | ব্যবহারকারী | এন | এন | ব্যবহারকারীর ডিবাগ -> ব্যবহারকারী GSI মুক্তিপত্রে স্বাক্ষর করা হয়েছে |
| এসটিএস | OEM-এর সিস্টেম | ব্যবহারকারীর ডিবাগ | এন | ওয়াই | Q-তে নতুন |
| ভিটিএস | জিএসআই | ব্যবহারকারী | ওয়াই | ওয়াই | ব্যবহারকারীর ডিবাগ -> ব্যবহারকারী GSI মুক্তিপত্রে স্বাক্ষর করা হয়েছে |
সংক্ষিপ্ত বিবরণ
এই অতিরিক্ত ইমেজ ফাইলগুলো বিল্ড ফোল্ডারের ( ${ANDROID_PRODUCT_OUT} ) অধীনে তৈরি হয়:
-
boot-debug.img -
vendor_boot-debug.img
যখন ডিভাইসের boot পার্টিশনে boot-debug.img ফ্ল্যাশ করা হয়, তখন সিস্টেম sepolicy ফাইলের ইউজারডিবাগ সংস্করণ এবং adb_debug.prop নামক একটি অতিরিক্ত প্রপার্টি ফাইল লোড হয়। এর ফলে ইউজার বিল্ড system.img (হয় GSI-এর অথবা OEM-এর) সহ adb root পাওয়া যায়।
জেনেরিক কার্নেল ইমেজ (GKI) ব্যবহারকারী ডিভাইসগুলিতে, যেগুলিতে vendor_boot পার্টিশন থাকে, সেগুলিতে boot-debug.img ফ্ল্যাশ করা উচিত নয়, কারণ boot পার্টিশনটি একটি সার্টিফাইড GKI ইমেজ দিয়ে ফ্ল্যাশ করতে হয়। এর পরিবর্তে, ডিবাগ র্যামডিস্কের সুবিধা দেওয়ার জন্য vendor_boot-debug.img vendor_boot পার্টিশনে ফ্ল্যাশ করা উচিত।
ডিবাগ র্যামডিস্ক ব্যবহারের পূর্বশর্তসমূহ
কমপ্লায়েন্স টেস্ট পরিচালনাকারী OEM ডিবাগ র্যামডিস্ক সরবরাহ করে থাকে। এটি অবশ্যই রিলিজ সাইনড হওয়া যাবে না এবং ডিভাইসটি আনলক করা থাকলেই কেবল এটি ব্যবহার করা যাবে।
নিম্নলিখিত ডিভাইসগুলি আপগ্রেড করার জন্য ডিবাগ র্যামডিস্ক তৈরি বা ব্যবহার করা হবে না:
-
BOARD_BUILD_SYSTEM_ROOT_IMAGEসত্য - কার্নেল কমান্ড লাইনে
skip_initramfs
অ্যান্ড্রয়েড ১২ জিএসআই
অ্যান্ড্রয়েড ১২ জিএসআই-এর সাথে ডিবাগ র্যামডিস্ক ব্যবহার করার জন্য কোনো অতিরিক্ত নির্দেশনার প্রয়োজন নেই।
২৯/০৯/২০২১ তারিখ থেকে, ডিবাগ র্যামডিস্কগুলোকে আর repack_bootimg টুল দিয়ে আপডেট করার প্রয়োজন নেই। SGR1.210929.001 (7777720) -এর পরবর্তী অ্যান্ড্রয়েড ১২ জিএসআই বিল্ড তার system.img ফাইলে হালনাগাদ userdebug_plat_sepolicy.cil ফাইলটি অন্তর্ভুক্ত করে এবং ডিবাগ র্যামডিস্ক থেকে userdebug_plat_sepolicy.cil উপেক্ষা করে। বিস্তারিত জানতে CLs দেখুন।
অ্যান্ড্রয়েড ১১ জিএসআই
যখন boot-debug.img বা vendor_boot-debug.img ব্যবহার করা হয়, তখন boot-debug.img বা vendor_boot-debug.img-এর ডিবাগ র্যামডিস্কে থাকা userdebug_plat_sepolicy.cil ফাইল থেকে সিস্টেম sepolicy লোড হয়। GSI ইমেজ বুট করার জন্য, অনুগ্রহ করে আপনার boot-debug.img boot-debug.img vendor_boot-debug.img vendor_boot-debug.img রি-বিল্ড করতে android11-gsi ব্রাঞ্চ থেকে সর্বদা হালনাগাদ sepolicy পরিবর্তনগুলো অন্তর্ভুক্ত করুন।
বিকল্পভাবে, আপডেট করা GSI sepolicy সহ boot-debug.img বা vendor_boot-debug.img পুনরায় তৈরি করতে repack_bootimg টুলটি ব্যবহার করা যেতে পারে।
একটি ডিবাগ র্যামডিস্ক পুনরায় প্যাক করুন
boot-debug.img পুনর্নির্মাণের জন্য sepolicy পরিবর্তনগুলি অন্তর্ভুক্ত করার পরিবর্তে, অংশীদাররা repack_bootimg ব্যবহার করে GSI sepolicy ফাইলটিকে boot-debug.img এ (অথবা ডিভাইসটি GKI ব্যবহার করলে vendor_boot-debug.img ) আপডেট করতে পারেন।
ধাপগুলো নিম্নরূপ:
https://ci.android.com থেকে
otatools.zipডাউনলোড করুন। আমরাaosp-android-latest-releaseব্রাঞ্চেরaosp_cf_arm64_only_phone-userdebugএর বিল্ড আর্টিফ্যাক্ট থেকে এটি ডাউনলোড করার পরামর্শ দিচ্ছি।repack_bootimgএর জন্য এক্সিকিউশন এনভায়রনমেন্ট সেটআপ করুন:unzip otatools.zip -d otatoolsexport PATH="${PWD}/otatools/bin:${PATH}"repack_bootimg --helpআপনি যে GSI বিল্ডটি ব্যবহার করছেন, সেখান থেকে
userdebug_plat_sepolicy.cilঅথবাboot-with-debug-ramdisk-${KERNEL_VERSION}.imgডাউনলোড করুন। উদাহরণস্বরূপ, যদি আপনিRJR1.211020.001 (7840830)থেকে একটি arm64 GSI ব্যবহার করেন, তাহলে https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest থেকে ডাউনলোড করুন।userdebug_plat_sepolicy.cilদিয়ে ডিভাইসেরboot-debug.imgঅথবাvendor_boot-debug.imgআপডেট করুন:repack_bootimg --local --dst_bootimg boot-debug.img \ --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil# If using GKIrepack_bootimg --local --dst_bootimg vendor_boot-debug.img \ --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cilboot-with-debug-ramdisk-${KERNEL_VERSION}.imgএর সাথে:repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \ --dst_bootimg boot-debug.img \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil# If using GKIrepack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \ --dst_bootimg vendor_boot-debug.img \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil--ramdisk_addএর আর্গুমেন্টগুলো ডিভাইসের কনফিগারেশন অনুযায়ী পরিবর্তন করা যেতে পারে। বিস্তারিত ব্যাখ্যার জন্য পরবর্তী অংশটি দেখুন।
userdebug sepolicy-এর পথ
উপরের repack_bootimg --src_bootimg এর র্যামডিস্ক থেকে userdebug_plat_sepolicy.cil ফাইলটিকে --dst_bootimg এর র্যামডিস্কে কপি করে। তবে, বিভিন্ন অ্যান্ড্রয়েড সংস্করণে একটি ডিবাগ র্যামডিস্কের ভেতরের পাথ ভিন্ন হতে পারে। অ্যান্ড্রয়েড ১০ এবং ১১-তে, কার্নেল কমান্ড লাইনে androidboot.force_normal_boot=1 থাকা ডিভাইসগুলোর জন্য পাথটি হলো first_stage_ramdisk/userdebug_plat_sepolicy.cil । অন্যথায়, পাথটি হলো userdebug_plat_sepolicy.cil ।
কার্নেল কমান্ড লাইনে androidboot.force_normal_boot আছে কিনা তা পরীক্ষা করতে নিম্নলিখিত কমান্ডটি চালান:
adb rootadb shell cat /proc/cmdline | grep force_normal_boot
অ্যান্ড্রয়েড ১২ এবং এর পরবর্তী সংস্করণগুলিতে, কার্নেল কমান্ড লাইনে androidboot.force_normal_boot=1 এর উপস্থিতি নির্বিশেষে, একটি ডিবাগ র্যামডিস্কের ভেতরের পাথ সর্বদা userdebug_plat_sepolicy.cil হয়। নিচের সারণিতে বিভিন্ন অ্যান্ড্রয়েড সংস্করণে একটি ডিবাগ র্যামডিস্কের ভেতরের পাথগুলো দেখানো হলো।
| ডিবাগ ইমেজ | অ্যান্ড্রয়েড ১০ | অ্যান্ড্রয়েড ১১ | অ্যান্ড্রয়েড ১২ |
|---|---|---|---|
| GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img | প্রযোজ্য নয় | first_stage_ramdisk/userdebug_plat_sepolicy.cil | userdebug_plat_sepolicy.cil |
| ডিভাইস-নির্দিষ্ট বুট-ডিবাগ.img | force_normal_boot এর উপর নির্ভর করে | force_normal_boot এর উপর নির্ভর করে | userdebug_plat_sepolicy.cil |
| ডিভাইস-নির্দিষ্ট vendor_boot-debug.img | প্রযোজ্য নয় | force_normal_boot এর উপর নির্ভর করে | userdebug_plat_sepolicy.cil |
আপনি src_path:dst_path জোড়ার একটি তালিকা ব্যবহার করে বিভিন্ন পাথ থেকে এবং বিভিন্ন পাথে ফাইল কপি করার জন্য --ramdisk_add নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি Android 11-এর boot-with-debug-ramdisk-5.4.img থেকে first_stage_ramdisk/userdebug_plat_sepolicy.cil ফাইলটিকে Android 11-এর vendor_boot-debug.img মধ্যে থাকা first_stage_ramdisk first_stage_ramdisk/userdebug_plat_sepolicy.cil ফাইলে কপি করে।
repack_bootimg \
--src_bootimg boot-with-debug-ramdisk-5.4.img \
--dst_bootimg vendor_boot-debug.img \
--ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil যদি কার্নেল কমান্ড লাইনে androidboot.force_normal_boot=1 না থাকে, তাহলে গন্তব্য পথটি userdebug_plat_sepolicy.cil এ পরিবর্তন করার জন্য কমান্ডটি নিচে দেখানো অনুযায়ী পরিবর্তন করতে হবে।
repack_bootimg \
--src_bootimg boot-with-debug-ramdisk-5.4.img \
--dst_bootimg vendor_boot-debug.img \
--ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cilএকটি AVB ফুটার যোগ করুন
যদি --dst_bootimg এ দেওয়া ইমেজটি একটি AVB-চেইনড পার্টিশন হিসেবে কনফিগার করা থাকে, তাহলে repack_bootimg কমান্ডটি চালানোর পর একটি AVB ফুটার যোগ করতে হবে।
উদাহরণস্বরূপ, repack_bootimg চালানোর আগে , vendor_boot-debug.img কোনো চেইনড AVB ফুটার আছে কিনা তা পরীক্ষা করতে নিম্নলিখিত কমান্ডটি চালান।
avbtool info_image --image vendor_boot-debug.img যদি এতে মূলত একটি চেইনড AVB ফুটার থাকে, তাহলে repack_bootimg কমান্ডটি চালানোর পর একটি AVB ফুটার যোগ করতে হবে। vendor_boot-debug.img কে সাইন করার জন্য যেকোনো টেস্ট কী ব্যবহার করা যায়, কারণ ডিবাগ র্যামডিস্ক শুধুমাত্র তখনই ব্যবহার করা যায় যখন ডিভাইসটি আনলক করা থাকে, যা boot বা vendor_boot পার্টিশনে নন-রিলিজ কী দ্বারা সাইন করা ইমেজ রাখার অনুমতি দেয়।
avbtool add_hash_footer --partition_name vendor_boot \
--partition_size 100663296 \
--algorithm SHA256_RSA4096 \
--key otatools/external/avb/test/data/testkey_rsa4096.pem \
--image vendor_boot-debug.img