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

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

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

حزم OTA المستندة إلى الملفات التي تم إيقافها نهائيًا في Android 8.0 للأجهزة بخلاف A/B، والتي يجب بدلاً من ذلك، عليك استخدام حِزم OTA المستندة إلى حظر. إلى إنشاء حزم عبر الهواء مستنِدة إلى الكتل أو أجهزة تعمل بنظام التشغيل Android 7.x أو إصدار أقدم خيار --block إلى المعلمة ota_from_target_files.

إصدار التحديثات الكاملة

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

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

تم إعداد مسار ota_from_target_files في $PATH، ولغة بايثون الناتجة يكون النظام الثنائي في الدليل 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 فترات متزايدة. التحديثات. يساعد هذا المستخدمين في متابعة أحدث إصدار وتجنب فترة تسلسل تثبيت التحديثات التزايدية.

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

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

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

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

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