إنّ التحديثات غير التلقائية هي منهجية قديمة لنظام OTA تستخدمها أجهزة Android القديمة (Android 6 والإصدارات الأقدم). تحتوي هذه الأجهزة على قسم استرداد مخصّص يحتوي على البرنامج المطلوب لشدَّد حزمة التحديث التي تم تنزيلها وتطبيق التحديث على الأقسام الأخرى.
على أجهزة Android القديمة التي لا تتضمّن قسمَي A/B، تحتوي مساحة الفلاش عادةً على الأقسام التالية:
- التشغيل
- يحتوي على نواة Linux ونظام ملفات جذر أساسي (يتم تحميله في قرص ذاكرة وصول عشوائي). يتم تثبيت النظام والأقسام الأخرى وبدء وقت التشغيل في قسم النظام.
- النظام
- يحتوي على تطبيقات ومكتبات النظام التي تتوفّر لها رموز المصدر على "المشروع المفتوح المصدر لنظام Android" (AOSP). أثناء التشغيل العادي، يتم تركيب هذا القسم للقراءة فقط، ولا يتم تغيير محتوياته إلا أثناء تحديث OTA.
- المُورِّد
- يحتوي على تطبيقات ومكتبات نظام لا يتوفّر لها رمز المصدر في "المشروع المفتوح المصدر لنظام Android" (AOSP). أثناء التشغيل العادي، يتم تركيب هذا القسم للقراءة فقط، ولا يتغيّر محتواه إلا أثناء تحديث OTA.
- userdata
- يتم تخزين البيانات المحفوظة بواسطة التطبيقات التي ثبَّتها المستخدم وما إلى ذلك. لا يتم عادةً تعديل هذا القسم من خلال عملية التحديث عبر الهواء.
- ذاكرة التخزين المؤقت
- مساحة تخزين مؤقتة تستخدمها بعض التطبيقات (يتطلب الوصول إلى هذا القسم أذونات خاصة للتطبيقات) وتخزين حِزم التحديثات التي يتم تنزيلها عبر شبكة غير سلكية. تستخدم البرامج الأخرى هذه المساحة مع توقّع أنّه يمكن أن تختفي الملفات في أي وقت. قد تؤدي بعض عمليات تثبيت حِزم OTA إلى محو هذا القسم بالكامل. تحتوي ذاكرة التخزين المؤقت أيضًا على سجلات التحديث من تحديث OTA.
- الاسترداد
- يحتوي على نظام Linux كامل ثانٍ، بما في ذلك نواة ورمز ثنائي خاص للاسترداد الذي يقرأ حزمة ويستخدم محتوياتها لتعديل الأقسام الأخرى.
- misc
- قسم صغير يستخدمه وضع الاسترداد لتخزين بعض المعلومات حول ما يفعله في حالة إعادة تشغيل الجهاز أثناء تطبيق حزمة OTA
مدة توفّر تحديث عبر الهواء
يتضمّن التحديث العادي عبر OTA الخطوات التالية:
- يُجري الجهاز عمليات تحقّق منتظمة مع خوادم OTA ويتم إعلامه بمدى توفّر تحديث، بما في ذلك عنوان URL لحزمة التحديث وسلسلة وصفية لعرضها على المستخدم.
-
يتم تعديل عمليات التنزيل إلى ذاكرة تخزين مؤقت أو قسم بيانات، ويتم التحقّق من توقيعه التشفيري
مقارنةً بالشهادات في
/system/etc/security/otacerts.zip
. يُطلَب من المستخدم تثبيت التحديث. - تتم إعادة تشغيل الجهاز في وضع الاسترداد، حيث يتم تشغيل النظام والنواة في قسم الاسترداد بدلاً من تشغيل النواة في قسم الإقلاع.
-
يتم تشغيل ملف Recovery الثنائي بواسطة init. يبحث عن وسيطات سطر الأوامر في
/cache/recovery/command
التي تشير إلى الحزمة التي تم تنزيلها. -
تتحقّق عملية الاسترداد من صحة التوقيع التشفيري للحزمة مقارنةً بالمفاتيح العامة في
/res/keys
(جزء من ذاكرة الوصول العشوائي (RAM) المتوفّرة في قسم الاسترداد). - يتم سحب البيانات من الحزمة واستخدامها لتعديل أقسام التمهيد و/أو النظام و/أو المصنّع حسب الحاجة. يحتوي أحد الملفات الجديدة التي تم تركها في قسم النظام على محتويات قسم الاسترداد الجديد.
-
تتم إعادة تشغيل الجهاز بشكل طبيعي.
- يتم تحميل قسم التمهيد الذي تم تعديله حديثًا، ويتم تثبيته وبدء تنفيذ الملفات الثنائية في قسم النظام الذي تم تعديله حديثًا.
-
كجزء من عملية التشغيل العادية، يتحقّق النظام من محتويات قسم الاسترداد مقارنةً بالمحتوى المطلوب (الذي تم تخزينه سابقًا كملف في
/system
). إذا كان المحتوى مختلفًا، تتم إعادة فلاش قسم الاسترداد باستخدام المحتوى المطلوب. (في عمليات التشغيل اللاحقة، يحتوي قسم الاسترداد على المحتوى الجديد، لذا لا يلزم إعادة فلاش الجهاز).
اكتملت عملية تحديث النظام. يمكن العثور على سجلّات التحديثات في
/cache/recovery/last_log.#
.
تحديث الحِزم
حزمة التحديث هي ملف .zip
يحتوي على الملف الثنائي التنفيذي
META-INF/com/google/android/update-binary
. بعد التحقّق من التوقيع على
الحزمة، يستخرج recovery
هذا الملف الثنائي إلى /tmp
ويشغّله،
مع تمرير الوسيطات التالية:
- تعديل رقم إصدار واجهة برمجة التطبيقات الثنائية إذا تغيّرت الوسيطات التي تم تمريرها إلى القيمة الثنائي update، يزداد هذا العدد.
- واصِف ملف مسار الأوامر يمكن لبرنامج التحديث استخدام هذا الأنبوب لإرسال الأوامر مرة أخرى إلى ملف recovery الثنائي، وذلك في معظم الأحيان بسبب تغييرات واجهة المستخدم، مثل الإشارة إلى مستوى التقدّم للمستخدم.
-
اسم ملف حزمة التحديث
.zip
يمكن لحزمة التحديث استخدام أي ملف ثنائي مرتبط بشكل ثابت كملف ثنائي للتحديث. تستخدم أدوات إنشاء حِزم OTA
برنامج التحديث (bootable/recovery/updater
)، الذي
يقدّم لغة برمجة نصية بسيطة يمكنها تنفيذ العديد من مهام التثبيت. يمكنك استبدال
أي ملف ثنائي آخر قيد التشغيل على الجهاز.
لمعرفة التفاصيل حول الملف الثنائي لبرنامج التحديث وبنية edify والدوالّ المضمّنة، يُرجى الاطّلاع على الاطّلاع على حِزم OTA.
نقل البيانات من الإصدارات السابقة
عند نقل البيانات من الإصدار 2.3/3.0/4.0 من نظام التشغيل Android، يكون التغيير الرئيسي هو تحويل كل الوظائف الخاصة بالجهاز من مجموعة من دوال 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()
الجديدة لإنشاء مثيل من الفئة الفرعية الجديدة للجهاز وإرجاعه.