নন-A/B সিস্টেম আপডেট

নন-AB আপডেট হল একটি বাতিল করা OTA পদ্ধতি যা পুরনো Android ডিভাইসে (Android 6 এবং তার আগের ভার্সন) ব্যবহার করা হয়। এইসব ডিভাইসে একটি ডেডিকেটেড রিকভারি পার্টিশন থাকে যাতে ডাউনলোড করা আপডেট প্যাকেজ আনপ্যাক করতে এবং অন্যান্য পার্টিশনে আপডেট প্রয়োগ করতে প্রয়োজনীয় সফ্টওয়্যার থাকে।

A/B পার্টিশন নেই এমন পুরনো Android ডিভাইসে, ফ্ল্যাশ স্পেসে সাধারণত নিম্নলিখিত পার্টিশন থাকে:

চালু করুন
Linux কার্নেল ও ন্যূনতম রুট ফাইলসিস্টেম (RAM ডিস্কে লোড করা) থাকে। এটি সিস্টেম ও অন্যান্য পার্টিশন মাউন্ট করে এবং সিস্টেম পার্টিশনে থাকা রানটাইম শুরু করে।
সিস্টেম
এতে Android ওপেন সোর্স প্রজেক্ট (AOSP)-এ উপলভ্য সোর্স কোড সহ সিস্টেম অ্যাপ্লিকেশন ও লাইব্রেরি থাকে। সাধারণ অপারেশনের সময়, এই পার্টিশন রিড-অনলি হিসেবে মাউন্ট করা হয়; এর কন্টেন্ট শুধুমাত্র OTA আপডেটের সময় পরিবর্তন হয়।
ভেন্ডর
এতে এমন সিস্টেম অ্যাপ্লিকেশন ও লাইব্রেরি থাকে যেগুলির সোর্স কোড Android ওপেন সোর্স প্রজেক্টে (AOSP) উপলভ্য নয় । সাধারণ অপারেশনের সময়, এই পার্টিশনটি শুধু-পঠনযোগ্য হিসেবে মাউন্ট করা হয়; এর কন্টেন্ট শুধুমাত্র OTA আপডেটের সময় পরিবর্তিত হয়।
ব্যবহারকারীর ডেটা
ব্যবহারকারীর ইনস্টল করা অ্যাপ্লিকেশন ইত্যাদি দ্বারা সেভ করা ডেটা স্টোর করে। এই পার্টিশনটি সাধারণত OTA আপডেট প্রসেস দ্বারা স্পর্শ করা হয় না।
সঞ্চিত
কিছু অ্যাপ্লিকেশনের (এই পার্টিশন অ্যাক্সেস করার জন্য বিশেষ অ্যাপ অনুমতির প্রয়োজন হয়) এবং ডাউনলোড করা OTA আপডেট প্যাকেজ স্টোরেজের জন্য ব্যবহৃত অস্থায়ী হোল্ডিং এরিয়া। অন্যান্য প্রোগ্রাম এই স্পেস ব্যবহার করে, এই প্রত্যাশা নিয়ে যে ফাইল যেকোনও সময় মুছে যেতে পারে। কিছু OTA প্যাকেজ ইনস্টল করার ফলে এই পার্টিশন সম্পূর্ণভাবে মুছে যেতে পারে। এছাড়াও, OTA আপডেট থেকে পাওয়া আপডেট লগ ক্যাশে থাকে।
রিকভারি
এতে কার্নেল ও বিশেষ রিকভারি বাইনারি সহ দ্বিতীয় সম্পূর্ণ Linux সিস্টেম থাকে যা প্যাকেজ পড়ে এবং অন্য পার্টিশন আপডেট করতে এর কন্টেন্ট ব্যবহার করে।
বিবিধ
OTA প্যাকেজ প্রয়োগ করার সময় ডিভাইস রিস্টার্ট হয়ে গেলে, রিকভারি কী করছে সেই সম্পর্কে কিছু তথ্য লুকিয়ে রাখার জন্য রিকভারি দ্বারা ব্যবহৃত ছোট পার্টিশন।

OTA আপডেটের মেয়াদ

সাধারণত OTA আপডেট করার সময় এইসব ধাপ অনুসরণ করা হয়:

  1. ডিভাইস OTA সার্ভারের সাথে নিয়মিত চেক-ইন করে এবং একটি আপডেটের উপলভ্যতা সম্পর্কে বিজ্ঞপ্তি পায়, যার মধ্যে আপডেট প্যাকেজের URL এবং ব্যবহারকারীকে দেখানোর জন্য একটি বিবরণ স্ট্রিং অন্তর্ভুক্ত থাকে।
  2. ক্যাশে বা ডেটা পার্টিশনে ডাউনলোড আপডেট করা হয় এবং /system/etc/security/otacerts.zip-এ থাকা সার্টিফিকেটের সাথে এর ক্রিপ্টোগ্রাফিক স্বাক্ষর যাচাই করা হয়। ব্যবহারকারীকে আপডেট ইনস্টল করার জন্য প্রম্পট করা হয়।
  3. ডিভাইস রিকভারি মোডে রিবুট হয়, যেখানে বুট পার্টিশনের কার্নেলের পরিবর্তে রিকভারি পার্টিশনের কার্নেল ও সিস্টেম বুট হয়।
  4. init-এর মাধ্যমে রিকভারি বাইনারি শুরু করা হয়েছে। এটি কমান্ড-লাইন আর্গুমেন্ট খুঁজে পায় যা /cache/recovery/command ডাউনলোড করা প্যাকেজের দিকে নির্দেশ করে।
  5. রিকভারি, প্যাকেজের ক্রিপ্টোগ্রাফিক স্বাক্ষরকে /res/keys-এর (রিকভারি পার্টিশনে থাকা RAM ডিস্কের অংশ) সর্বজনীন কী-এর সাথে মিলিয়ে যাচাই করে।
  6. প্যাকেজ থেকে ডেটা নেওয়া হয় এবং প্রয়োজনীয়তা অনুযায়ী বুট, সিস্টেম এবং/অথবা ভেন্ডর পার্টিশন আপডেট করতে ব্যবহার করা হয়। সিস্টেম পার্টিশনে বাকি থাকা নতুন ফাইলগুলির মধ্যে একটিতে নতুন রিকভারি পার্টিশনের কন্টেন্ট রয়েছে।
  7. ডিভাইস স্বাভাবিকভাবে রিবুট হয়।
    1. নতুন আপডেট করা বুট পার্টিশন লোড করা হয় এবং এটি নতুন আপডেট করা সিস্টেম পার্টিশনে বাইনারি মাউন্ট ও এক্সিকিউট করা শুরু করে।
    2. স্বাভাবিক স্টার্ট-আপের অংশ হিসেবে, সিস্টেম রিকভারি পার্টিশনের কন্টেন্ট কাঙ্ক্ষিত কন্টেন্টের সাথে চেক করে (যা আগে /system-এ ফাইল হিসেবে সেভ করা হয়েছিল)। এগুলি আলাদা, তাই রিকভারি পার্টিশনকে কাঙ্ক্ষিত কন্টেন্ট দিয়ে আবার ফ্ল্যাশ করা হয়। (পরবর্তী বুট করার সময়, রিকভারি পার্টিশনে আগেই নতুন কন্টেন্ট থাকে, তাই আবার ফ্ল্যাশ করার প্রয়োজন হয় না।)

সিস্টেম আপডেট সম্পূর্ণ হয়েছে! আপডেট লগ /cache/recovery/last_log.#-এ পাওয়া যাবে।

প্যাকেজ আপডেট করা

আপডেট প্যাকেজ হল একটি .zip ফাইল যাতে এক্সিকিউটেবল বাইনারি META-INF/com/google/android/update-binary থাকে। প্যাকেজে স্বাক্ষর যাচাই করার পরে, recovery এই বাইনারি /tmp-এ এক্সট্র্যাক্ট করে এবং বাইনারি রান করে, নিম্নলিখিত আর্গুমেন্ট পাস করে:

  • বাইনারি API ভার্সন নম্বর আপডেট করুন। আপডেট করা বাইনারি পরিবর্তন করার জন্য আর্গুমেন্ট পাস করা হলে, এই সংখ্যাটি বৃদ্ধি পায়।
  • কমান্ড পাইপের ফাইল ডেসক্রিপ্টর। আপডেট প্রোগ্রাম এই পাইপ ব্যবহার করে রিকভারি বাইনারিতে কমান্ড পাঠাতে পারে, বেশিরভাগ ক্ষেত্রে UI পরিবর্তনের জন্য, যেমন ব্যবহারকারীকে প্রগ্রেস দেখানো।
  • আপডেট প্যাকেজ .zip ফাইলের নাম।

আপডেট প্যাকেজ, আপডেট বাইনারি হিসেবে যেকোনও স্ট্যাটিক্যালি লিঙ্ক করা বাইনারি ব্যবহার করতে পারে। OTA প্যাকেজ নির্মাণের টুলগুলি আপডেটার প্রোগ্রাম (bootable/recovery/updater) ব্যবহার করে, যা একটি সহজ স্ক্রিপ্টিং ভাষা প্রদান করে যা অনেক ইনস্টলেশন টাস্ক করতে পারে। আপনি ডিভাইসে চলা অন্য যেকোনও বাইনারি প্রতিস্থাপন করতে পারবেন।

আপডেটার বাইনারি, এডিফাই সিনট্যাক্স ও বিল্ট-ইন ফাংশন সম্পর্কে বিস্তারিত জানতে, OTA প্যাকেজের মধ্যে দেখুন।

আগের রিলিজ থেকে মাইগ্রেট করা

Android 2.3/3.0/4.0 রিলিজ থেকে মাইগ্রেট করার সময়, প্রধান পরিবর্তন হল, আগে থেকে নির্ধারিত নাম সহ C ফাংশনের একটি সেট থেকে সমস্ত ডিভাইস-নির্দিষ্ট কার্যকারিতাকে C++ অবজেক্টে কনভার্ট করা। নিচের টেবিলে পুরনো ফাংশন ও নতুন পদ্ধতি তালিকাভুক্ত করা হয়েছে যেগুলি মোটামুটি একই উদ্দেশ্যে কাজ করে:

C ফাংশন C++ পদ্ধতি
device_recovery_start() Device::RecoveryStart()
device_toggle_display()
device_reboot_now()
RecoveryUI::CheckKey()
(এছাড়াও RecoveryUI::IsKeyPressed())
device_handle_key() Device::HandleMenuKey()
device_perform_action() Device::InvokeMenuItem()
device_wipe_data() Device::WipeData()
device_ui_init() ScreenRecoveryUI::Init()

পুরনো ফাংশন থেকে নতুন পদ্ধতিতে কনভার্সন মোটামুটি সহজ হওয়া উচিত। আপনার নতুন Device সাবক্লাসের ইনস্ট্যান্স তৈরি ও রিটার্ন করার জন্য নতুন make_device() ফাংশন যোগ করতে ভুলবেন না।