يمكنك استخدام أداة ota_from_target_files
المتوفّرة في build/make/tools/releasetools
لإنشاء حِزم OTA كاملة ومتصاعدة
للأجهزة التي تستخدم تحديثات نظام A/B أو
تحديثات نظام غير A/B. تأخذ الأداة ملف target-files.zip
الذي تم إنشاؤه من خلال نظام إصدار Android كإدخال.
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 11 أو إصدار أحدث، يمكنك إنشاء حزمة واحدة عبر الهواء لأجهزة متعددة تتضمّن رموز التخزين التعريفية المختلفة. يتطلّب ذلك ضبط الأجهزة المستهدَفة لاستخدام البصمات الديناميكية وتعديل البيانات الوصفية لميزة OTA لتضمين اسم الجهاز وبصمته في إدخالات الشرطَين المسبق واللاحق.
أوقف نظام التشغيل Android 8.0 نهائيًا استخدام حِزم التحديثات "عبر الهواء" المستندة إلى الملفات على الأجهزة غير المزوّدة بميزة A/B، والتي يجب أن تستخدم بدلاً من ذلك حِزم التحديثات "عبر الهواء" المستندة إلى الوحدات. ل
إنشاء حِزم OTA مستندة إلى مجموعات أو أجهزة تعمل بنظام التشغيل Android 7.x أو الإصدارات الأقدم، نقْل
الخيار --block
إلى المَعلمة ota_from_target_files
.
إنشاء تحديثات كاملة
التحديث الكامل هو حزمة عبر شبكة غير سلكية تحتوي على الحالة النهائية الكاملة
للجهاز (أقسام النظام وبدء التشغيل والاسترداد). وما دام الجهاز قادرًا على تلقّي الحِزمة وتطبيقها، يمكن للحزمة تثبيت الإصدار بغض النظر عن حالة الجهاز الحالية. على سبيل المثال، تستخدِم الأوامر التالية
أدوات الإصدار لإنشاء أرشيف target-files.zip
لجهاز
tardis
.
. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output
ينشئ make dist
حزمة كاملة للتحديث عبر الهواء (في $OUT
). يحتوي ملف .zip
الناتج
على كل ما يلزم لإنشاء حِزم تحديث عبر الهواء لجهاز tardis
.
يمكنك أيضًا إنشاء ota_from_target_files
كملف ثنائي لبرنامج Python واستدعائه ل
إنشاء حِزم كاملة أو متزايدة.
ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip
يتم إعداد مسار ota_from_target_files
في $PATH
، ويقع ملف python
الثنائي الناتج في الدليل out/
.
أصبح تطبيق ota_update.zip
جاهزًا الآن لإرساله إلى الأجهزة الاختبارية (يتم توقيع كل شيء
باستخدام مفتاح الاختبار). بالنسبة إلى أجهزة المستخدمين، يمكنك إنشاء مفاتيحك الخاصة واستخدامها كما هو موضَّح في توقيع الإصدارات للإصدار.
إنشاء تحديثات تدريجية
التحديث تزايدي هو حزمة OTA تحتوي على رموز تصحيح ثنائية للبيانات الموجودة على الجهاز بالفعل. وتكون الحِزم التي تتضمّن تحديثات متزايدة أصغر حجمًا عادةً لأنّها لا تحتاج إلى تضمين الملفات التي لم يتم تغييرها. بالإضافة إلى ذلك، بما أنّ الملفات التي تم تغييرها غالبًا ما تكون مشابهة جدًا لإصداراتها السابقة، ما على الحزمة سوى تضمين ترميز للاختلافات بين الملفَّين.
لا يمكنك تثبيت حزمة تحديث متزايد إلا على الأجهزة التي تحتوي على
الإصدار المصدر المستخدَم في إنشاء الحزمة. لإنشاء تحديث تدريجي،
ستحتاج إلى ملف target_files.zip
من الإصدار السابق (الإصدار الذي تريد
تعديله منه) بالإضافة إلى ملف target_files.zip
من الإصدار الجديد. على سبيل المثال، تستخدِم الأوامر التالية أدوات الإصدار لإنشاء تحديث تدريجي
لجهاز tardis
.
ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip
يشبه هذا الإصدار كثيرًا الإصدار السابق، ويكون حِزمة التحديث المتزايد (incremental_ota_update.zip
) أصغر بكثير من التحديث الكامل المقابل (حوالي 1 ميغابايت بدلاً من 60 ميغابايت).
وزِّع الحزمة المتزايدة فقط على الأجهزة التي تعمل بالإصدار السابق نفسه
الذي تم استخدامه كنقطة بداية للحزمة المتزايدة. يجب فلاش
الصور في PREVIOUS-tardis-target_files.zip
أو PREVIOUS-tardis-img.zip
(كلاهما تم إنشاؤه باستخدام make dist
، ويجب فلاشهما باستخدام fastboot update
)، بدلاً من
الصور ضمن الدليل PRODUCT_OUT
(تم إنشاؤها باستخدام make
، ويجب
فلاشها باستخدام fastboot flashall
). تؤدي محاولة تثبيت الحزمة المتزايدة
على جهاز يتضمّن إصدارًا آخر إلى حدوث خطأ في التثبيت. في حال تعذّر اكتمال عملية التثبيت، يظل الجهاز في حالة العمل نفسها (يعمل بالنظام القديم)، وتتحقّق الحزمة من الحالة السابقة لجميع الملفات التي تعدّلها قبل معالجتها، وبالتالي لا يبقى الجهاز في حالة ترقية غير مكتملة.
للحصول على أفضل تجربة للمستخدم، قدِّم تحديثًا كاملاً بعد كل 3 أو 4 تحديثات تصاعدية. يساعد هذا المستخدمين في متابعة أحدث إصدار وتجنب سلسلة طويلة من عمليات التثبيت من التحديثات الإضافية.
إنشاء حِزم OTA لرموز تخزين تعريفية متعددة
يتيح الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث استخدام حزمة واحدة عبر الهواء لأجهزة متعددة تتضمّن رموز التخزين التعريفية المختلفة. يتطلّب ذلك ضبط الأجهزة المستهدَفة لاستخدام البصمات الديناميكية وتعديل البيانات الوصفية لميزة "التحديث عبر الهواء" (باستخدام أدوات "التحديث عبر الهواء") لتضمين اسم الجهاز وبصمته في إدخالات الشروط التمهيدية واللاحقة.
لمحة عن رموز التخزين التعريفية
تنسيق رمز التخزين التعريفي هو متغيّر من قيم مَعلمة الإصدار المجمّعة، وعادةً ما يكون مجموعة فرعية غير معلَنة من مَعلمات build_fingerprint
الحالية.
يمكن لمصنّعي المعدّات الأصلية استخدام أيّ مجموعة من مَعلمات الإنشاء الموافَق عليها من قِبل فريق CDD لرموز التخزين التعريفي مع
استخدام صورة واحدة أيضًا لهذه الرموز. على سبيل المثال، يحتوي رمز التخزين التعريفي التالي على
خيارات متعددة:
SKU = <product><device><modifierA><modifierB><modifierC>
modifierA
هو مستوى الجهاز (مثل Pro أو Premium أو Plus)modifierB
هو تنوع الأجهزة (مثل الراديو)modifierC
هي المنطقة، ويمكن أن تكون عامة (مثل NA أو EMEA أو CHN) أو خاصة بالبلد أو اللغة (مثل JPN أو ENG أو CHN).
يستخدم العديد من المصنّعين الأصليّين للأجهزة صورة واحدة لعدة رموز تخزين تعريفية، ثم يستخرجون اسم المنتج النهائي
ومعرف الجهاز أثناء التشغيل بعد تشغيل الجهاز. تعمل هذه العملية على تبسيط عملية تطوير المنصة، ما يتيح للأجهزة التي تتضمّن تعديلات بسيطة ولكن أسماء منتجات مختلفة مشاركة الصور الشائعة (مثل
tardis
وtardispro
).
استخدام بصمات الإصبع الديناميكية
بصمة الجهاز هي سلسلة محدّدة من مَعلمات
الإصدار، مثل
ro.product.brand
وro.product.name
وro.product.device
. يتم اشتقاق بصمة الجهاز
من بصمة قسم النظام ويتم استخدامها كأحد
المعرّفات الفريدة للصور (والبايت) التي تعمل على الجهاز. لإنشاء بصمة ديناميكية، استخدِم المنطق الديناميكي في ملف build.prop
للجهاز للحصول على قيمة متغيّرات أداة تحميل التشغيل في وقت تشغيل الجهاز، ثم استخدِم هذه البيانات لإنشاء بصمة ديناميكية لهذا الجهاز.
على سبيل المثال، لاستخدام ملفات مرجعية ديناميكية لأجهزة tardis
وtardispro
،
عدِّل الملفات التالية كما هو موضّح أدناه.
عدِّل ملف
odm/etc/build_std.prop
ليتضمّن السطر التالي.ro.odm.product.device=tardis
عدِّل ملف
odm/etc/build_pro.prop
ليتضمّن السطر التالي.ro.odm.product.device=tardispro
عدِّل ملف
odm/etc/build.prop
لكي يتضمّن الأسطر التالية.ro.odm.product.device=tardis import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
تضبط هذه الأسطر ديناميكيًا اسم الجهاز ومعرف الجهاز وقيمة
ro.build.fingerprint
استنادًا إلى قيمة سمة bootloader
ro.boot.product.hardware.sku
(التي تكون للقراءة فقط).
تعديل البيانات الوصفية لحزمة التحديث عبر الهواء
تحتوي حزمة OTA على ملف بيانات وصفية (META-INF/com/android/metadata
) يصف الحزمة، بما في ذلك الشرط المسبق والشرط اللاحق لحزمة OTA. على سبيل المثال، الرمز البرمجي التالي هو ملف البيانات الوصفية لحزمة OTA
تستهدف جهاز tardis
.
post-build=google/tardis/tardis:11/RP1A.200521.001/6516341:userdebug/dev-keys
post-build-incremental=6516341
post-sdk-level=30
post-security-patch-level=2020-07-05
post-timestamp=1590026334
pre-build=google/tardis/tardis:11/RP1A.200519.002.A1/6515794:userdebug/dev-keys
pre-build-incremental=6515794
pre-device=tardis
تحدد قيم pre-device
وpre-build-incremental
وpre-build
الحالة التي يجب أن يمتلكها الجهاز قبل أن تتمكن من تثبيت حزمة OTA. تحدِّد قيم
post-build-incremental
وpost-build
الحالة التي يُتوقّع أن يكون عليها الجهاز
بعد تثبيت حزمة OTA. يتم اشتقاق قيم حقلي pre-
وpost-
من خصائص التصميم المقابلة التالية.
- يتمّ اشتقاق قيمة
pre-device
من سمة الإصدارro.product.device
. - يتم اشتقاق قيمتَي
pre-build-incremental
وpost-build-incremental
من سمة الإصدارro.build.version.incremental
. - يتم اشتقاق قيمتَي
pre-build
وpost-build
من سمة الإصدارro.build.fingerprint
.
على الأجهزة التي تعمل بنظام التشغيل Android 11 أو إصدار أحدث، يمكنك استخدام العلامة --boot_variable_file
في أدوات OTA لتحديد مسار إلى ملف يحتوي على قيم متغيّرات وقت التشغيل المستخدَمة في إنشاء بصمة الجهاز الديناميكية. بعد ذلك، يتم استخدام البيانات لتعديل البيانات الوصفية لنظام التشغيل من خلال التحديثات التلقائية لتضمين اسم الجهاز ومعرف الجهاز في الشرطَين pre-
وpost-
(باستخدام رمز علامة الشرطة المائلة | كفاصل). تحتوي العلامة --boot_variable_file
على
البنية والوصف التاليين.
- البنية:
--boot_variable_file <path>
- الوصف: تُحدِّد مسارًا لملف يحتوي على القيم المحتملة لسمات
ro.boot.*
. تُستخدَم لحساب ملفات مرجعية محتملة لوقت التشغيل عندما يتم إلغاء بعض سماتro.product.*
باستخدام عبارة الاستيراد. ويتوقّع الملف سمة واحدة في كل سطر يكون فيه كل سطر بالتنسيق التالي:prop_name=value1,value2
.
على سبيل المثال، عندما تكون السمة ro.boot.product.hardware.sku=std,pro
، تظهر
البيانات الوصفية لأجهزة tardis
وtardispro
على النحو الموضّح أدناه.
post-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-device=tardis|tardispro
لتفعيل هذه الوظيفة على الأجهزة التي تعمل بنظام التشغيل Android 10، يُرجى الاطّلاع على مرجع تنفيذ
.
يُحلِّل هذا قائمة التغييرات عبارات import
بشكل مشروط في ملف build.prop
، ما يتيح التعرّف على عمليات إلغاء السمات وعرضها في
البيانات الوصفية النهائية لنظام التشغيل OTA.