يمكنك استخدام أداة ota_from_target_files
المتوفّرة في build/make/tools/releasetools
لإنشاء حِزم OTA كاملة وتزايدية للأجهزة التي تستخدم تحديثات نظام A/B أو تحديثات نظام غير A/B. تتلقّى الأداة
ملف target-files.zip
الذي ينتجه نظام إنشاء Android كمدخل.
بالنسبة إلى الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو إصدار أحدث، يمكنك إنشاء حزمة واحدة من تحديثات عبر الأثير (OTA) لأجهزة متعددة ذات رموز تخزين تعريفية (SKU) مختلفة. ويتطلّب ذلك ضبط الأجهزة المستهدَفة لاستخدام البصمات الديناميكية وتعديل البيانات الوصفية الخاصة بالتحديث عبر الهواء لتضمين اسم الجهاز وبصمته في إدخالات الشروط المسبقة واللاحقة.
أوقف الإصدار 8.0 من نظام التشغيل Android نهائيًا حِزم OTA المستندة إلى الملفات للأجهزة غير المتوافقة مع نظام التشغيل A/B، والتي يجب أن تستخدم بدلاً من ذلك حِزم OTA المستندة إلى الحظر. لإنشاء حِزم OTA مستندة إلى الحظر أو الأجهزة التي تعمل بالإصدار 7.x من نظام التشغيل Android أو الإصدارات الأقدم، مرِّر الخيار --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
كملف ثنائي لغة Python واستدعائه لإنشاء حِزم كاملة أو إضافية.
ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip
يتم إعداد مسار ota_from_target_files
في $PATH
، ويتم وضع ملف بايثون الثنائي الناتج في الدليل out/
.
أصبح ota_update.zip
جاهزًا الآن للإرسال إلى الأجهزة الاختبارية (تم توقيع كل شيء باستخدام مفتاح الاختبار). بالنسبة إلى أجهزة المستخدمين، عليك إنشاء مفاتيح خاصة واستخدامها كما هو موضّح بالتفصيل في مقالة توقيع الإصدارات.
إنشاء تحديثات تدريجية
التحديث التزايدي هو حزمة تحديث عبر الهواء تحتوي على تصحيحات ثنائية للبيانات المتوفّرة على الجهاز. عادةً ما تكون الحِزم التي تتضمّن تحديثات إضافية أصغر حجمًا لأنّها لا تحتاج إلى تضمين الملفات التي لم يتم تغييرها. بالإضافة إلى ذلك، بما أنّ الملفات المعدَّلة غالبًا ما تكون مشابهة جدًا لنُسخها السابقة، لا تحتاج الحزمة إلا إلى تضمين ترميز للاختلافات بين الملفين.
لا يمكنك تثبيت حزمة تحديث إضافية إلا على الأجهزة التي تتضمّن إصدار المصدر المستخدَم في إنشاء الحزمة. لإنشاء تحديث تراكمي،
تحتاج إلى ملف 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 أو الإصدارات الأحدث استخدام حزمة واحدة من التحديث عبر الهواء (OTA) للعديد من الأجهزة التي تتضمّن وحدات حفظ مخزون (SKU) مختلفة. ويتطلّب ذلك ضبط الأجهزة المستهدَفة لاستخدام بصمات ديناميكية وتعديل البيانات الوصفية الخاصة بالتحديث عبر اتصال لاسلكي (باستخدام أدوات التحديث عبر اتصال لاسلكي) لتضمين اسم الجهاز وبصمته في إدخالات الحالة السابقة واللاحقة.
لمحة عن رموز التخزين التعريفية
تنسيق رمز التخزين التعريفي هو صيغة من قيم مَعلمات الإنشاء المدمجة، وهو عادةً مجموعة فرعية غير معرَّفة من مَعلمات build_fingerprint
الحالية.
يمكن لمصنّعي المعدات الأصلية استخدام أي مجموعة من مَعلمات الإصدار التي تمت الموافقة عليها في مستند تعريف التوافق لرمز تخزين تعريفي، مع استخدام صورة واحدة لرموز التخزين التعريفية هذه. على سبيل المثال، يحتوي رمز التخزين التعريفي التالي على عدة خيارات:
SKU = <product><device><modifierA><modifierB><modifierC>
modifierA
هو مستوى الجهاز (مثل Pro أو Premium أو Plus)-
modifierB
هو نوع الجهاز (مثل الراديو) modifierC
هي المنطقة التي يمكن أن تكون عامة (مثل أمريكا الشمالية أو أوروبا والشرق الأوسط وأفريقيا أو الصين) أو خاصة ببلد أو لغة (مثل اليابان أو الإنجليزية أو الصين)
يستخدم العديد من المصنّعين الأصليين للأجهزة صورة واحدة لعدة وحدات حفظ مخزون، ثم يستمدون اسم المنتج النهائي وبصمة الجهاز في وقت التشغيل بعد بدء تشغيل الجهاز. تؤدي هذه العملية إلى تبسيط عملية تطوير المنصة، ما يتيح للأجهزة التي تتضمّن تعديلات بسيطة ولكن بأسماء منتجات مختلفة مشاركة الصور الشائعة (مثل 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
الحالة التي يجب أن يكون عليها الجهاز قبل أن يتمكّن من تثبيت حزمة التحديث عبر الهواء. تحدّد القيمتان
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
لإتاحة هذه الوظيفة على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android، يُرجى الاطّلاع على التنفيذ المرجعي.
تحلّل قائمة التغيير هذه عبارات import
في ملف build.prop
بشكل مشروط، ما يتيح التعرّف على عمليات إلغاء السمات وعرضها في البيانات الوصفية النهائية للتحديث عبر شبكة غير سلكية (OTA).