بناء حزم التحديث عبر الهواء

يمكنك استخدام أداة ota_from_target_files المتوفّرة في build/make/tools/releasetools لإنشاء حِزم OTA كاملة ومتصاعدة للأجهزة التي تستخدم تحديثات نظام A/B أو تحديثات نظام غير A/B. تأخذ الأداة ملف target-files.zip الذي ينشئه نظام إنشاء Android كمدخل.

بالنسبة إلى الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث، يمكنك إنشاء حزمة OTA واحدة لأجهزة متعددة برموز تخزين تعريفية مختلفة. يتطلّب ذلك ضبط الأجهزة المستهدَفة لاستخدام البصمات الديناميكية وتعديل البيانات الوصفية لميزة 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 فترات متزايدة. التحديثات. يساعد هذا المستخدمين في متابعة أحدث إصدار وتجنب فترة تسلسل تثبيت التحديثات التزايدية.

إنشاء حزم التحديث عبر الهواء لرموز تخزين تعريفية متعددة

يتيح الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث استخدام حزمة واحدة عبر الهواء لأجهزة متعددة تتضمّن رموز التخزين التعريفية المختلفة. ويتطلب إجراء ذلك تهيئة الأجهزة المستهدفة لاستخدام البصمة الديناميكية وتحديث البيانات الوصفية لـ OTA (باستخدام أدوات التحديث عبر الهواء) لتضمين اسم الجهاز وبصمة الإصبع في القسمَين السابق واللاحق الإدخالات الشرطية.

لمحة عن رموز التخزين التعريفية

يمثّل تنسيق رمز التخزين التعريفي (SKU) اختلافًا في قيم مَعلمة الإنشاء المجمّعة، وهو عادةً مجموعة فرعية غير معلَن عنها من مَعلمات build_fingerprint الحالية. ويمكن للمصنّعين الأصليين للأجهزة استخدام أي مجموعة من معلَمات الإصدار المعتمَدة من CDD لرمز التخزين التعريفي. أيضًا استخدام صورة واحدة لرموز التخزين التعريفية هذه. على سبيل المثال، يحتوي رمز التخزين التعريفي التالي على أشكال متعددة:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA هو مستوى الجهاز (مثلاً Pro أو Premium أو Plus)
  • modifierB هو نوع الجهاز (مثل radio)
  • 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 من القيم بناءً على قيمة سمة برنامج الإقلاع في 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 لتحديد مسار إلى ملف يحتوي على قيم متغيّرات وقت التشغيل المستخدَمة في إنشاء بصمة الجهاز الديناميكية. يتم بعد ذلك استخدام البيانات لتحديث بيانات تعريف 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، تكون البيانات الوصفية لميزة OTA لأجهزة 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. ، الذي يتيح التعرّف على إلغاءات الخصائص وإظهارها في البيانات الوصفية النهائية عبر اتصال لاسلكي.