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

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

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

زندگی به روزرسانی OTA

یک به روزرسانی معمول OTA شامل مراحل زیر است:

  1. دستگاه به طور منظم با سرورهای OTA اعلام حضور می کند و از در دسترس بودن یک به روزرسانی ، از جمله URL بسته به روزرسانی و رشته توصیف برای نشان دادن به کاربر ، مطلع می شود.
  2. بارگیری ها را به یک حافظه پنهان یا پارتیشن داده به روز کنید و امضای رمزنگاری شده آن در برابر گواهی های موجود در /system/etc/security/otacerts.zip . از کاربر خواسته می شود به روزرسانی را نصب کند.
  3. دستگاه به حالت ریکاوری راه اندازی می شود ، در این حالت هسته و سیستم موجود در پارتیشن بازیابی بجای هسته در پارتیشن بوت بوت می شود.
  4. باینری بازیابی توسط init شروع می شود. این آرگومان های خط فرمان را در /cache/recovery/command که آن را به بسته بارگیری شده نشان می دهد.
  5. Recovery امضای رمزنگاری بسته را در برابر کلیدهای عمومی موجود در /res/keys (بخشی از دیسک RAM موجود در پارتیشن بازیابی) تأیید می کند.
  6. داده ها از بسته خارج می شوند و برای به روزرسانی پارتیشن های بوت ، سیستم و / یا فروشنده در صورت لزوم استفاده می شوند. یکی از پرونده های جدیدی که در پارتیشن سیستم باقی مانده است ، حاوی محتوای پارتیشن بازیابی جدید است.
  7. دستگاه به طور معمول راه اندازی مجدد می شود.
    1. پارتیشن بوت تازه به روز شده بارگیری می شود ، و عملیات اجرای باینری را در پارتیشن سیستم تازه به روز شده نصب و شروع می کند.
    2. به عنوان بخشی از راه اندازی عادی ، سیستم محتوای پارتیشن بازیابی را از نظر محتوای مورد نظر (که قبلاً به عنوان پرونده در /system ذخیره شده بودند) بررسی می کند. آنها متفاوت هستند ، بنابراین پارتیشن بازیابی با محتوای مورد نظر بازنشر می شود. (در چکمه های بعدی ، پارتیشن بازیابی از قبل حاوی مطالب جدید است ، بنابراین نیازی به reflash نیست.)

به روزرسانی سیستم کامل شد! گزارش های بروزرسانی را می توانید در /cache/recovery/last_log. #

بسته ها را به روز کنید

بسته به روزرسانی یک فایل .zip است که شامل باینری اجرایی META-INF/com/google/android/update-binary . پس از تأیید امضا روی بسته ، recovery این باینری را به /tmp می کند و باینری را اجرا می کند ، با استدلال های زیر:

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

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

برای جزئیات مربوط به باینری به روزرسانی ، ویرایش نحو و توابع داخلی ، به Inside OTA Packages مراجعه کنید .

مهاجرت از نسخه های قبلی

هنگام مهاجرت از نسخه Android 2.3 / 3.0 / 4.0 ، تغییر عمده تبدیل کلیه قابلیتهای خاص دستگاه از مجموعه توابع C با نامهای از پیش تعریف شده به اشیا C C ++ است. جدول زیر توابع قدیمی و روشهای جدید را نشان می دهد که تقریباً معادل یک هدف را دنبال می کنند:

عملکرد C روش C ++
device_recovery_start () دستگاه :: RecoveryStart ()
display_toggle_display ()
device_reboot_now ()
RecoveryUI :: CheckKey ()
(همچنین RecoveryUI :: IsKeyPressed ())
device_handle_key () دستگاه :: HandleMenuKey ()
device_perform_action () دستگاه :: InvokeMenuItem ()
device_wipe_data () دستگاه :: WipeData ()
device_ui_init () ScreenRecoveryUI :: Init ()

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