به‌روزرسانی‌های سیستم غیر A/B

به‌روزرسانی‌های غیر AB روشی منسوخ‌شده برای OTA است که توسط دستگاه‌های Android قدیمی‌تر (Android نسخه ۶ و قبل‌از آن) استفاده می‌شود. این دستگاه‌ها بخش بازیابی اختصاصی دارند که حاوی نرم‌افزار موردنیاز برای از حالت فشرده خارج کردن بسته به‌روزرسانی بارگیری‌شده و اعمال به‌روزرسانی در بخش‌های دیگر است.

در دستگاه‌های Android قدیمی‌تر بدون پارتیشن A/B، فضای حافظه معمولاً شامل پارتیشن‌های زیر است:

راه‌اندازی
شامل هسته Linux و یک سیستم فایل ریشه حداقل (بارگیری‌شده در دیسک RAM) است. سیستم و پارتیشن‌های دیگر را نصب می‌کند و زمان اجرا را که در پارتیشن سیستم قرار دارد شروع می‌کند.
سیستم
شامل برنامه‌ها و کتابخانه‌های سیستمی است که کد منبع آن‌ها در «پروژه منبع باز Android»‏ (AOSP) دردسترس است. درطول عملکرد عادی، این پارتیشن به‌صورت فقط خواندنی سوار می‌شود؛ محتوای آن فقط درطول به‌روزرسانی OTA تغییر می‌کند.
فروشنده
شامل برنامه‌ها و کتابخانه‌های سیستمی است که کد منبع آن‌ها در «پروژه منبع باز Android»‏ (AOSP) دردسترس نیست. درطول عملکرد عادی، این پارتیشن به‌صورت فقط خواندنی نصب می‌شود؛ محتوای آن فقط درطول به‌روزرسانی «از راه دور» تغییر می‌کند.
userdata
داده‌های ذخیره‌شده توسط برنامه‌های نصب‌شده توسط کاربر و غیره را ذخیره می‌کند. این پارتیشن معمولاً توسط فرایند به‌روزرسانی OTA لمس نمی‌شود.
حفظ کردن
فضای نگهداری موقت که چند برنامه از آن استفاده می‌کنند (دسترسی به این پارتیشن نیازمند اجازه‌های ویژه برنامه است) و برای ذخیره بسته‌های به‌روزرسانی OTA بارگیری‌شده. برنامه‌های دیگر از این فضا با این انتظار استفاده می‌کنند که فایل‌ها ممکن است در هر زمانی ناپدید شوند. برخی‌از نصب‌های بسته OTA ممکن است منجر به پاک شدن کامل این پارتیشن شود. حافظه پنهان همچنین حاوی گزارش‌های به‌روزرسانی از به‌روزرسانی OTA است.
بازیابی
شامل سیستم کامل Linux دومی است، ازجمله هسته و باینری ویژه بازیابی که بسته را می‌خواند و از محتوای آن برای به‌روزرسانی پارتیشن‌های دیگر استفاده می‌کند.
متفرقه
بخش کوچکی که بازیابی از آن استفاده می‌کند تا اطلاعاتی درباره کاری که انجام می‌دهد ذخیره کند تا درصورتی‌که دستگاه درحین اعمال بسته OTA بازراه‌اندازی شد، از این اطلاعات استفاده کند.

عمر به‌روزرسانی ازطریق هوا

به‌روزرسانی معمول ازطریق هوا شامل مراحل زیر است:

  1. دستگاه به‌طور منظم با سرورهای OTA ارتباط برقرار می‌کند و از دردسترس بودن به‌روزرسانی مطلع می‌شود، ازجمله نشانی وب بسته به‌روزرسانی و رشته توضیحات برای نمایش به کاربر.
  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 استخراج می‌کند و باینری را اجرا می‌کند و آرگومان‌های زیر را ارسال می‌کند:

  • شماره نسخه میانای برنامه‌سازی کاربردی باینری را به‌روزرسانی کنید. اگر آرگومان‌های ارسال‌شده به به‌روزرسانی باینری تغییر کند، این عدد افزایش می‌یابد.
  • توصیف‌گر فایل خط فرمان. برنامه به‌روزرسانی می‌تواند از این کانال برای ارسال دستورات به باینری بازیابی استفاده کند، بیشتر برای تغییرات واسط کاربر، مثل نشان دادن پیشرفت به کاربر.
  • نام فایل به‌روزرسانی بسته فایل .zip.

بسته به‌روزرسانی می‌تواند از هر باینری پیوندشده ایستا به‌عنوان باینری به‌روزرسانی استفاده کند. ابزارهای ساخت بسته OTA از برنامه به‌روزرسان (bootable/recovery/updater) استفاده می‌کنند که زبان دستورگان ساده‌ای را ارائه می‌دهد که می‌تواند بسیاری از وظایف نصب را انجام دهد. می‌توانید هر باینری دیگری را که در دستگاه اجرا می‌شود جایگزین کنید.

برای جزئیات مربوط به باینری به‌روزرسان، نحو edify، و توابع داخلی، به داخل بسته‌های 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()

تبدیل توابع قدیمی به روش‌های جدید باید نسبتاً ساده باشد. فراموش نکنید تابع جدید make_device() را اضافه کنید تا نمونه‌ای از زیرکلاس جدید «دستگاه» شما ایجاد و برگردانده شود.