আপনি build/make/tools/releasetools এ দেওয়া ota_from_target_files টুলটি ব্যবহার করে A/B সিস্টেম আপডেট বা নন-A/B সিস্টেম আপডেট ব্যবহারকারী ডিভাইসগুলির জন্য সম্পূর্ণ এবং ইনক্রিমেন্টাল OTA প্যাকেজ তৈরি করতে পারেন। এই টুলটি অ্যান্ড্রয়েড বিল্ড সিস্টেম দ্বারা উৎপাদিত target-files.zip ফাইলটিকে ইনপুট হিসেবে গ্রহণ করে।
অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলির জন্য, আপনি ভিন্ন ভিন্ন SKU সহ একাধিক ডিভাইসের জন্য একটি OTA প্যাকেজ তৈরি করতে পারেন। এটি করার জন্য, টার্গেট ডিভাইসগুলিকে ডাইনামিক ফিঙ্গারপ্রিন্ট ব্যবহার করার জন্য কনফিগার করতে হবে এবং প্রি ও পোস্টকন্ডিশন এন্ট্রিতে ডিভাইসের নাম ও ফিঙ্গারপ্রিন্ট অন্তর্ভুক্ত করার জন্য OTA মেটাডেটা আপডেট করতে হবে ।
অ্যান্ড্রয়েড ৮.০ নন-এ/বি ডিভাইসগুলোর জন্য ফাইল-ভিত্তিক OTA প্যাকেজ অপ্রচলিত ঘোষণা করেছে, যার পরিবর্তে সেগুলোকে অবশ্যই ব্লক-ভিত্তিক OTA প্যাকেজ ব্যবহার করতে হবে। অ্যান্ড্রয়েড ৭.x বা তার নিম্ন সংস্করণে চালিত ডিভাইসগুলোর জন্য ব্লক-ভিত্তিক OTA প্যাকেজ তৈরি করতে, ota_from_target_files প্যারামিটারে --block অপশনটি পাস করুন।
সম্পূর্ণ আপডেট তৈরি করুন
একটি সম্পূর্ণ আপডেট হলো একটি OTA প্যাকেজ, যাতে ডিভাইসটির সম্পূর্ণ চূড়ান্ত অবস্থা (সিস্টেম, বুট এবং রিকভারি পার্টিশন) থাকে। যতক্ষণ ডিভাইসটি প্যাকেজটি গ্রহণ এবং প্রয়োগ করতে সক্ষম থাকে, ততক্ষণ ডিভাইসটির বর্তমান অবস্থা নির্বিশেষে প্যাকেজটি বিল্ডটি ইনস্টল করতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডগুলো tardis ডিভাইসের জন্য target-files.zip আর্কাইভটি বিল্ড করতে রিলিজ টুল ব্যবহার করে।
. build/envsetup.sh && lunch tardis-engmkdir dist_outputmake dist DIST_DIR=dist_output
make dist একটি সম্পূর্ণ OTA প্যাকেজ ( $OUT ফোল্ডারে) তৈরি করে। এর ফলে তৈরি হওয়া .zip ফাইলটিতে tardis ডিভাইসের জন্য OTA প্যাকেজ তৈরি করতে প্রয়োজনীয় সবকিছু থাকে। এছাড়াও আপনি ` ota_from_target_files কে একটি পাইথন বাইনারি হিসেবে বিল্ড করে সম্পূর্ণ বা ইনক্রিমেন্টাল প্যাকেজ তৈরির জন্য এটিকে কল করতে পারেন।
ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip $PATH এ ota_from_target_files পাথটি সেট করা আছে এবং এর ফলে তৈরি হওয়া পাইথন বাইনারিটি out/ ডিরেক্টরিতে অবস্থিত।
ota_update.zip এখন টেস্ট ডিভাইসগুলিতে পাঠানোর জন্য প্রস্তুত (সবকিছু টেস্ট কী দিয়ে স্বাক্ষরিত)। ব্যবহারকারীদের ডিভাইসের জন্য, "Signing builds for release" অংশে বিস্তারিতভাবে বর্ণিত পদ্ধতি অনুযায়ী আপনার নিজস্ব প্রাইভেট কী তৈরি ও ব্যবহার করুন।
ক্রমবর্ধমান আপডেট তৈরি করুন
ইনক্রিমেন্টাল আপডেট হলো একটি OTA প্যাকেজ, যাতে ডিভাইসে আগে থেকে থাকা ডেটার জন্য বাইনারি প্যাচ থাকে। ইনক্রিমেন্টাল আপডেটযুক্ত প্যাকেজগুলো সাধারণত আকারে ছোট হয়, কারণ এতে অপরিবর্তিত ফাইল অন্তর্ভুক্ত করার প্রয়োজন হয় না। এছাড়াও, যেহেতু পরিবর্তিত ফাইলগুলো প্রায়শই তাদের পূর্ববর্তী সংস্করণের সাথে খুব সাদৃশ্যপূর্ণ হয়, তাই প্যাকেজটিতে শুধুমাত্র দুটি ফাইলের মধ্যকার পার্থক্যগুলোর একটি এনকোডিং অন্তর্ভুক্ত করলেই চলে।
আপনি একটি ইনক্রিমেন্টাল আপডেট প্যাকেজ শুধুমাত্র সেই ডিভাইসগুলিতে ইনস্টল করতে পারবেন যেগুলিতে প্যাকেজটি তৈরিতে ব্যবহৃত সোর্স বিল্ডটি রয়েছে। একটি ইনক্রিমেন্টাল আপডেট বিল্ড করার জন্য, আপনার পূর্ববর্তী বিল্ডের (যেটি থেকে আপনি আপডেট করতে চান) target_files.zip ফাইল এবং নতুন বিল্ডের target_files.zip ফাইল উভয়ই প্রয়োজন হবে। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডগুলি tardis ডিভাইসের জন্য একটি ইনক্রিমেন্টাল আপডেট বিল্ড করতে রিলিজ টুল ব্যবহার করে।
ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip এই বিল্ডটি আগের বিল্ডের মতোই, এবং ইনক্রিমেন্টাল আপডেট প্যাকেজটি ( incremental_ota_update.zip ) সংশ্লিষ্ট সম্পূর্ণ আপডেটের চেয়ে অনেক ছোট (৬০ এমবি-র পরিবর্তে প্রায় ১ এমবি)।
একটি ইনক্রিমেন্টাল প্যাকেজ শুধুমাত্র সেইসব ডিভাইসে বিতরণ করুন যেগুলিতে প্যাকেজটির সূচনা বিন্দু হিসাবে ব্যবহৃত ঠিক একই পূর্ববর্তী বিল্ডটি চলছে। আপনাকে অবশ্যই PRODUCT_OUT PRODUCT_OUT অধীনে থাকা ইমেজগুলির (যা make dist fastboot update PREVIOUS-tardis-target_files.zip PREVIOUS-tardis-img.zip make fastboot flashall ) ফ্ল্যাশ করতে হবে। অন্য কোনো বিল্ডযুক্ত ডিভাইসে ইনক্রিমেন্টাল প্যাকেজটি ইনস্টল করার চেষ্টা করলে একটি ইনস্টলেশন ত্রুটি দেখা দেবে। যখন ইনস্টল ব্যর্থ হয়, ডিভাইসটি তার আগের কার্যক্ষম অবস্থাতেই (পুরানো সিস্টেমটি চালু রেখে) থেকে যায়; প্যাকেজটি আপডেট করার আগে সমস্ত ফাইলের পূর্ববর্তী অবস্থা যাচাই করে নেয়, ফলে ডিভাইসটি অর্ধ-আপগ্রেড হওয়া অবস্থায় আটকে থাকে না।
সর্বোত্তম ব্যবহারকারী অভিজ্ঞতার জন্য, প্রতি ৩-৪টি ইনক্রিমেন্টাল আপডেটের পর একটি সম্পূর্ণ আপডেট দিন। এটি ব্যবহারকারীদের সর্বশেষ রিলিজের সাথে তাল মেলাতে এবং ইনক্রিমেন্টাল আপডেটের দীর্ঘ ইনস্টলেশন প্রক্রিয়া এড়াতে সাহায্য করে।
একাধিক SKU-এর জন্য OTA প্যাকেজ তৈরি করুন
অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণ ভিন্ন ভিন্ন SKU-যুক্ত একাধিক ডিভাইসের জন্য একটিমাত্র OTA প্যাকেজ ব্যবহার সমর্থন করে। এটি করার জন্য, টার্গেট ডিভাইসগুলোকে ডাইনামিক ফিঙ্গারপ্রিন্ট ব্যবহারের জন্য কনফিগার করতে হয় এবং প্রি ও পোস্ট কন্ডিশন এন্ট্রিতে ডিভাইসের নাম ও ফিঙ্গারপ্রিন্ট অন্তর্ভুক্ত করার জন্য OTA মেটাডেটা (OTA টুলস ব্যবহার করে) আপডেট করতে হয়।
SKU সম্পর্কে
একটি SKU-এর ফরম্যাট হলো সম্মিলিত বিল্ড প্যারামিটার ভ্যালুগুলোর একটি ভিন্ন রূপ এবং এটি সাধারণত বর্তমান build_fingerprint প্যারামিটারগুলোর একটি অঘোষিত উপসেট। OEM-রা একটি SKU-এর জন্য CDD-অনুমোদিত বিল্ড প্যারামিটারগুলোর যেকোনো সংমিশ্রণ ব্যবহার করতে পারে এবং একই সাথে সেই SKU-গুলোর জন্য একটি একক ইমেজও ব্যবহার করতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত SKU-টির একাধিক ভিন্ন রূপ রয়েছে:
SKU = <product><device><modifierA><modifierB><modifierC>
-
modifierAহলো ডিভাইসের স্তর (যেমন Pro, Premium, বা Plus) -
modifierBহলো হার্ডওয়্যার সংস্করণ (যেমন রেডিও) -
modifierCহলো অঞ্চল, যা সাধারণ (যেমন NA, EMEA, বা CHN) অথবা দেশ- বা ভাষা-নির্দিষ্ট (যেমন JPN, ENG, বা CHN) হতে পারে।
অনেক OEM একাধিক SKU-এর জন্য একটিমাত্র ইমেজ ব্যবহার করে, এবং এরপর ডিভাইসটি বুট আপ হওয়ার পর রানটাইমে চূড়ান্ত পণ্যের নাম ও ডিভাইস ফিঙ্গারপ্রিন্ট নির্ধারণ করে। এই প্রক্রিয়াটি প্ল্যাটফর্ম ডেভেলপমেন্ট প্রক্রিয়াকে সহজ করে তোলে, যার ফলে সামান্য কাস্টমাইজেশন থাকা সত্ত্বেও ভিন্ন ভিন্ন পণ্যের নামের ডিভাইসগুলো একই ইমেজ শেয়ার করতে পারে (যেমন tardis এবং tardispro )।
ডায়নামিক ফিঙ্গারপ্রিন্ট ব্যবহার করুন
ফিঙ্গারপ্রিন্ট হলো ro.product.brand , ro.product.name , এবং ro.product.device এর মতো বিল্ড প্যারামিটারগুলোর একটি সংজ্ঞায়িত সংযোগ। একটি ডিভাইসের ফিঙ্গারপ্রিন্ট সিস্টেম পার্টিশন ফিঙ্গারপ্রিন্ট থেকে উদ্ভূত হয় এবং ডিভাইসটিতে চলমান ইমেজ (এবং বাইট)-এর একটি অনন্য শনাক্তকারী হিসাবে ব্যবহৃত হয়। একটি ডাইনামিক ফিঙ্গারপ্রিন্ট তৈরি করতে, ডিভাইসটির build.prop ফাইলে ডাইনামিক লজিক ব্যবহার করে ডিভাইস বুট হওয়ার সময় বুটলোডার ভেরিয়েবলের মান নিন, তারপর সেই ডেটা ব্যবহার করে ওই ডিভাইসটির জন্য একটি ডাইনামিক ফিঙ্গারপ্রিন্ট তৈরি করুন।
উদাহরণস্বরূপ, tardis এবং tardispro ডিভাইসগুলির জন্য ডাইনামিক ফিঙ্গারপ্রিন্ট ব্যবহার করতে, নীচে দেখানো অনুযায়ী নিম্নলিখিত ফাইলগুলি আপডেট করুন।
odm/etc/build_std.propফাইলটি আপডেট করে নিম্নলিখিত লাইনটি যুক্ত করুন।ro.odm.product.device=tardisodm/etc/build_pro.propফাইলটি আপডেট করে নিম্নলিখিত লাইনটি যুক্ত করুন।ro.odm.product.device=tardisproodm/etc/build.propফাইলটি আপডেট করে নিম্নলিখিত লাইনগুলো অন্তর্ভুক্ত করুন।ro.odm.product.device=tardis import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
এই লাইনগুলো ro.boot.product.hardware.sku বুটলোডার প্রপার্টির (যা রিড-অনলি) মানের উপর ভিত্তি করে ডিভাইসের নাম, ফিঙ্গারপ্রিন্ট এবং ro.build.fingerprint এর মান ডায়নামিকভাবে সেট করে।
OTA প্যাকেজের মেটাডেটা আপডেট করুন
একটি OTA প্যাকেজে একটি মেটাডেটা ফাইল ( META-INF/com/android/metadata ) থাকে, যা প্যাকেজটির বর্ণনা দেয় এবং এতে OTA প্যাকেজটির পূর্বশর্ত ও পরবর্তী শর্ত অন্তর্ভুক্ত থাকে। উদাহরণস্বরূপ, নিচের কোডটি হলো tardis ডিভাইসকে লক্ষ্য করে তৈরি একটি OTA প্যাকেজের মেটাডেটা ফাইল।
post-build=google/tardis/tardis:11/RP1A.200521.001/6516341:userdebug/dev-keys
post-build-incremental=6516341
post-sdk-level=30
post-security-patch-level=2020-07-05
post-timestamp=1590026334
pre-build=google/tardis/tardis:11/RP1A.200519.002.A1/6515794:userdebug/dev-keys
pre-build-incremental=6515794
pre-device=tardis
pre-device , pre-build-incremental , এবং pre-build ভ্যালুগুলো সেই অবস্থা নির্ধারণ করে যা একটি ডিভাইসের OTA প্যাকেজ ইনস্টল হওয়ার আগে অবশ্যই থাকতে হবে। post-build-incremental এবং post-build ভ্যালুগুলো সেই অবস্থা নির্ধারণ করে যা একটি ডিভাইসের OTA প্যাকেজ ইনস্টল হওয়ার পরে থাকার কথা। pre- এবং post- ফিল্ডগুলোর ভ্যালু নিম্নলিখিত সংশ্লিষ্ট বিল্ড প্রোপার্টিগুলো থেকে নেওয়া হয়।
-
pre-deviceমানটিro.product.deviceবিল্ড প্রপার্টি থেকে নেওয়া হয়। -
pre-build-incrementalএবংpost-build-incrementalমানগুলিro.build.version.incrementalবিল্ড প্রপার্টি থেকে নেওয়া হয়। -
pre-buildএবংpost-buildমানগুলিro.build.fingerprintবিল্ড প্রপার্টি থেকে নেওয়া হয়।
অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে, আপনি OTA টুলগুলিতে --boot_variable_file ফ্ল্যাগটি ব্যবহার করে এমন একটি ফাইলের পাথ নির্দিষ্ট করতে পারেন, যেটিতে ডিভাইসের ডাইনামিক ফিঙ্গারপ্রিন্ট তৈরির জন্য ব্যবহৃত রানটাইম ভেরিয়েবলগুলির মান থাকে। এরপর এই ডেটা ব্যবহার করে OTA মেটাডেটা আপডেট করা হয়, যাতে pre- এবং post- কন্ডিশনে ডিভাইসের নাম ও ফিঙ্গারপ্রিন্ট অন্তর্ভুক্ত থাকে (ডিলিমিটার হিসেবে পাইপ ক্যারেক্টার | ব্যবহার করে)। --boot_variable_file ফ্ল্যাগটির সিনট্যাক্স এবং বর্ণনা নিম্নরূপ।
- সিনট্যাক্স:
--boot_variable_file <path> - বিবরণ: এটি এমন একটি ফাইলের পাথ নির্দিষ্ট করে যেখানে
ro.boot.*প্রপার্টিগুলোর সম্ভাব্য মান থাকে। যখন ইম্পোর্ট স্টেটমেন্ট দ্বারা কিছুro.product.*প্রপার্টি ওভাররাইড করা হয়, তখন সম্ভাব্য রানটাইম ফিঙ্গারপ্রিন্ট গণনা করতে এটি ব্যবহৃত হয়। ফাইলটিতে প্রতি লাইনে একটি করে প্রপার্টি থাকে এবং প্রতিটি লাইনের ফরম্যাটটি হলো:prop_name=value1,value2।
উদাহরণস্বরূপ, যখন প্রপার্টিটি ro.boot.product.hardware.sku=std,pro হয়, তখন tardis এবং tardispro ডিভাইসগুলির জন্য OTA মেটাডেটা নিচে দেখানো অনুযায়ী হয়।
post-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-device=tardis|tardispro
অ্যান্ড্রয়েড ১০ চালিত ডিভাইসগুলিতে এই কার্যকারিতাটি সমর্থন করার জন্য, রেফারেন্স ইমপ্লিমেন্টেশনটি দেখুন। এই চেঞ্জলিস্টটি build.prop ফাইলের import স্টেটমেন্টগুলিকে শর্তসাপেক্ষে পার্স করে, যা প্রপার্টি ওভাররাইডগুলিকে শনাক্ত করতে এবং চূড়ান্ত OTA মেটাডেটাতে প্রতিফলিত করতে সক্ষম করে।