تحديثات النظام غير A / B

في أجهزة Android القديمة التي لا تحتوي على أقسام A/B، تحتوي مساحة الفلاش عادةً على الأقسام التالية:

حذاء طويل
يحتوي على نواة Linux ونظام ملفات جذر بسيط (يتم تحميله في قرص RAM). يقوم بتثبيت النظام والأقسام الأخرى ويبدأ وقت التشغيل الموجود على قسم النظام.
نظام
يحتوي على تطبيقات النظام والمكتبات التي تحتوي على كود مصدر متاح في مشروع Android مفتوح المصدر (AOSP). أثناء التشغيل العادي، يتم تثبيت هذا القسم للقراءة فقط؛ تتغير محتوياته فقط أثناء تحديث OTA.
بائع
يحتوي على تطبيقات النظام والمكتبات التي لا تحتوي على كود مصدر متاح في مشروع Android مفتوح المصدر (AOSP). أثناء التشغيل العادي، يتم تثبيت هذا القسم للقراءة فقط؛ تتغير محتوياته فقط أثناء تحديث 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 الثنائي . إذا تغيرت الوسائط التي تم تمريرها إلى التحديث الثنائي، فسيزداد هذا الرقم.
  • واصف ملف أنبوب الأوامر . يمكن لبرنامج التحديث استخدام هذا الأنبوب لإرسال الأوامر مرة أخرى إلى ثنائي الاسترداد، غالبًا لتغييرات واجهة المستخدم، مثل الإشارة إلى التقدم للمستخدم.
  • اسم ملف حزمة التحديث .zip file .

يمكن لحزمة التحديث استخدام أي برنامج ثنائي مرتبط بشكل ثابت باعتباره برنامج التحديث الثنائي. تستخدم أدوات إنشاء حزمة OTA برنامج التحديث ( bootable/recovery/updater )، الذي يوفر لغة برمجة بسيطة يمكنها القيام بالعديد من مهام التثبيت. يمكنك استبدال أي ثنائي آخر يعمل على الجهاز.

للحصول على تفاصيل حول برنامج التحديث الثنائي، وتحرير بناء الجملة، والوظائف المضمنة، راجع داخل حزم OTA .

الهجرة من الإصدارات السابقة

عند الترحيل من إصدار Android 2.3/3.0/4.0، يتمثل التغيير الرئيسي في تحويل جميع الوظائف الخاصة بالجهاز من مجموعة وظائف C بأسماء محددة مسبقًا إلى كائنات C++. يسرد الجدول التالي الوظائف القديمة والأساليب الجديدة التي تخدم غرضًا مكافئًا تقريبًا:

وظيفة ج طريقة C++
Device_recovery_start() الجهاز::RecoveryStart()
جهاز_toggle_display()
جهاز_reboot_now()
واجهة المستخدم للاسترداد::CheckKey()
(أيضًا RecoveryUI::IsKeyPressed())
جهاز_مقبض_مفتاح() الجهاز::HandleMenuKey()
Device_perform_action() الجهاز::InvoceMenuItem()
جهاز_مسح_البيانات() الجهاز::WipeData()
جهاز_ui_init() ScreenRecoveryUI::Init()

يجب أن يكون تحويل الوظائف القديمة إلى أساليب جديدة واضحًا إلى حد معقول. لا تنس إضافة وظيفة make_device() الجديدة لإنشاء وإرجاع مثيل للفئة الفرعية الجديدة لجهازك.