OTA প্যাকেজ তৈরি করা

A/B সিস্টেম আপডেট বা নন- A/B সিস্টেম আপডেট ব্যবহার করে এমন ডিভাইসগুলির জন্য সম্পূর্ণ এবং বর্ধিত OTA প্যাকেজ তৈরি করতে আপনি build/make/tools/releasetools এ দেওয়া ota_from_target_files টুল ব্যবহার করতে পারেন। টুলটি Android বিল্ড সিস্টেম দ্বারা উত্পাদিত target-files.zip ফাইলটিকে ইনপুট হিসাবে নেয়।

Android 11 বা উচ্চতর সংস্করণে চলমান ডিভাইসগুলির জন্য, আপনি বিভিন্ন SKU সহ একাধিক ডিভাইসের জন্য একটি OTA প্যাকেজ তৈরি করতে পারেন। এটি করার জন্য গতিশীল আঙ্গুলের ছাপগুলি ব্যবহার করার জন্য লক্ষ্য ডিভাইসগুলিকে কনফিগার করা এবং পূর্ব এবং পরবর্তী অবস্থার এন্ট্রিগুলিতে ডিভাইসের নাম এবং আঙ্গুলের ছাপ অন্তর্ভুক্ত করার জন্য OTA মেটাডেটা আপডেট করা প্রয়োজন৷

Android 8.0 নন-A/B ডিভাইসগুলির জন্য ফাইল-ভিত্তিক OTA প্যাকেজগুলিকে অবমূল্যায়ন করেছে, যার পরিবর্তে অবশ্যই ব্লক-ভিত্তিক OTA প্যাকেজগুলি ব্যবহার করতে হবে৷ ব্লক-ভিত্তিক OTA প্যাকেজ বা Android 7.x বা তার কম সংস্করণে চলমান ডিভাইসগুলি তৈরি করতে, --block বিকল্পটি ota_from_target_files প্যারামিটারে পাস করুন।

সম্পূর্ণ আপডেট বিল্ডিং

একটি সম্পূর্ণ আপডেট হল একটি OTA প্যাকেজ যা ডিভাইসের সম্পূর্ণ চূড়ান্ত অবস্থা (সিস্টেম, বুট এবং পুনরুদ্ধার পার্টিশন) ধারণ করে। যতক্ষণ পর্যন্ত ডিভাইসটি প্যাকেজ গ্রহণ এবং প্রয়োগ করতে সক্ষম হয়, ততক্ষণ ডিভাইসের বর্তমান অবস্থা নির্বিশেষে প্যাকেজটি বিল্ড ইনস্টল করতে পারে। উদাহরণস্বরূপ, tardis ডিভাইসের জন্য target-files.zip আর্কাইভ তৈরি করতে নিম্নলিখিত কমান্ডগুলি রিলিজ টুল ব্যবহার করে।

. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make 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

ota_from_target_files পাথ $PATH এ সেট আপ করা হয়েছে এবং এর ফলে পাইথন বাইনারি out/ ডিরেক্টরিতে অবস্থিত।

ota_update.zip এখন টেস্ট ডিভাইসে পাঠানোর জন্য প্রস্তুত (সবকিছুই পরীক্ষা কী দিয়ে স্বাক্ষরিত)। ব্যবহারকারীর ডিভাইসের জন্য, প্রকাশের জন্য সাইনিং বিল্ডে বিশদভাবে আপনার নিজস্ব ব্যক্তিগত কী তৈরি করুন এবং ব্যবহার করুন।

ক্রমবর্ধমান আপডেট বিল্ডিং

একটি বর্ধিত আপডেট হল একটি 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 ) সংশ্লিষ্ট সম্পূর্ণ আপডেটের থেকে অনেক ছোট (60 MB এর পরিবর্তে প্রায় 1 MB)।

ইনক্রিমেন্টাল প্যাকেজের প্রারম্ভিক বিন্দু হিসাবে ব্যবহৃত ঠিক একই পূর্ববর্তী বিল্ডটি চালিত ডিভাইসগুলিতে একটি বর্ধিত প্যাকেজ বিতরণ করুন। আপনাকে PRODUCT_OUT PREVIOUS-tardis-img.zip ( PREVIOUS-tardis-target_files.zip make dist fastboot update , make fastboot flashall দিয়ে ফ্ল্যাশ করা হবে)। অন্য কিছু বিল্ড সহ একটি ডিভাইসে ইনক্রিমেন্টাল প্যাকেজ ইনস্টল করার চেষ্টা করার ফলে একটি ইনস্টলেশন ত্রুটি দেখা দেয়। যখন ইনস্টল ব্যর্থ হয়, ডিভাইসটি একই কাজের অবস্থায় থাকে (পুরানো সিস্টেম চলছে); প্যাকেজটি স্পর্শ করার আগে আপডেট হওয়া সমস্ত ফাইলের পূর্ববর্তী অবস্থা যাচাই করে, তাই ডিভাইসটি অর্ধেক আপগ্রেড অবস্থায় আটকে থাকে না।

সর্বোত্তম ব্যবহারকারীর অভিজ্ঞতার জন্য, প্রতি 3-4টি ক্রমবর্ধমান আপডেটের জন্য একটি সম্পূর্ণ আপডেট অফার করুন। এটি ব্যবহারকারীদের সর্বশেষ রিলিজটি ধরতে এবং ক্রমবর্ধমান আপডেটের দীর্ঘ ইনস্টল ক্রম এড়াতে সহায়তা করে।

একাধিক SKU-এর জন্য OTA প্যাকেজ তৈরি করা

Android 11 বা উচ্চতর বিভিন্ন SKU সহ একাধিক ডিভাইসের জন্য একটি একক OTA প্যাকেজ ব্যবহার করে সমর্থন করে। এটি করার জন্য গতিশীল আঙ্গুলের ছাপ ব্যবহার করার জন্য লক্ষ্য ডিভাইসগুলিকে কনফিগার করা এবং পূর্ব এবং পরবর্তী অবস্থার এন্ট্রিগুলিতে ডিভাইসের নাম এবং আঙুলের ছাপ অন্তর্ভুক্ত করার জন্য OTA মেটাডেটা (OTA সরঞ্জাম ব্যবহার করে) আপডেট করা প্রয়োজন।

SKU সম্পর্কে

একটি SKU এর বিন্যাস হল সম্মিলিত বিল্ড প্যারামিটার মানের একটি বৈচিত্র এবং এটি সাধারণত বর্তমান build_fingerprint প্যারামিটারের একটি অঘোষিত উপসেট। OEMগুলি একটি SKU-এর জন্য CDD-অনুমোদিত বিল্ড প্যারামিটারগুলির যেকোন সংমিশ্রণ ব্যবহার করতে পারে এবং সেই SKUগুলির জন্য একটি একক চিত্রও ব্যবহার করতে পারে৷ উদাহরণস্বরূপ, নিম্নলিখিত SKU এর একাধিক বৈচিত্র রয়েছে:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA হল ডিভাইস স্তর (যেমন প্রো, প্রিমিয়াম বা প্লাস)
  • 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=tardis
    
  • নিম্নলিখিত লাইন ধারণ করতে odm/etc/build_pro.prop ফাইলটি আপডেট করুন।

    ro.odm.product.device=tardispro
    
  • নিম্নলিখিত লাইনগুলি ধারণ করতে odm/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 প্যাকেজ ইনস্টল করার আগে একটি ডিভাইসের যে অবস্থা থাকা আবশ্যক তা সংজ্ঞায়িত করে। OTA প্যাকেজ ইন্সটল হওয়ার পর একটি ডিভাইসের প্রত্যাশিত অবস্থার বিল্ড-পরবর্তী post-build-incremental এবং post-build মানগুলি নির্ধারণ করে। pre- এবং post- ক্ষেত্রগুলির মানগুলি নিম্নলিখিত সংশ্লিষ্ট বিল্ড বৈশিষ্ট্যগুলি থেকে প্রাপ্ত হয়।

  • pre-device মান ro.product.device বিল্ড প্রপার্টি থেকে নেওয়া হয়েছে।
  • pre-build-incremental এবং post-build-incremental মানগুলি ro.build.version.incremental বিল্ড প্রোপার্টি থেকে নেওয়া হয়েছে।
  • pre-build এবং post-build মানগুলি ro.build.fingerprint বিল্ড প্রপার্টি থেকে নেওয়া হয়েছে।

অ্যান্ড্রয়েড 11 বা উচ্চতর সংস্করণে চলমান ডিভাইসগুলিতে, আপনি ডিভাইসের গতিশীল ফিঙ্গারপ্রিন্ট তৈরিতে ব্যবহৃত রানটাইম ভেরিয়েবলের মান ধারণ করে এমন একটি ফাইলের পাথ নির্দিষ্ট করতে 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

Android 10 চালিত ডিভাইসগুলিতে এই কার্যকারিতা সমর্থন করতে, রেফারেন্স বাস্তবায়ন দেখুন। এই পরিবর্তন তালিকা শর্তসাপেক্ষে build.prop ফাইলে import বিবৃতি পার্স করে, যা সম্পত্তি ওভাররাইডগুলিকে স্বীকৃত এবং চূড়ান্ত OTA মেটাডেটাতে প্রতিফলিত করতে সক্ষম করে।