يمكنك استخدام أداة ota_from_target_files
المتوفرة في build/make/tools/releasetools
لإنشاء حزم OTA كاملة ومتزايدة للأجهزة التي تستخدم تحديثات نظام A/B أو تحديثات نظام غير A/B . تأخذ الأداة الملف target-files.zip
الذي ينتجه نظام إنشاء Android كمدخل.
بالنسبة للأجهزة التي تعمل بنظام التشغيل Android 11 أو أعلى، يمكنك إنشاء حزمة OTA واحدة لأجهزة متعددة بوحدات SKU مختلفة. يتطلب القيام بذلك تكوين الأجهزة المستهدفة لاستخدام بصمات الأصابع الديناميكية وتحديث بيانات تعريف OTA لتضمين اسم الجهاز وبصمة الإصبع في إدخالات الحالة المسبقة واللاحقة.
قام Android 8.0 بإهمال حزم OTA المستندة إلى الملفات للأجهزة غير A/B، والتي يجب بدلاً من ذلك استخدام حزم OTA المستندة إلى الكتلة . لإنشاء حزم 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
بإنشاء حزمة OTA كاملة (في $OUT
). يحتوي ملف .zip
الناتج على كل ما يلزم لإنشاء حزم OTA لجهاز tardis
. يمكنك أيضًا إنشاء ملفات ota_from_target_files
كثنائي بيثون واستدعائها لإنشاء حزم كاملة أو تزايدية.
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 لوحدات SKU المتعددة
يدعم Android 11 أو الإصدارات الأحدث استخدام حزمة OTA واحدة لأجهزة متعددة ذات وحدات SKU مختلفة. يتطلب القيام بذلك تكوين الأجهزة المستهدفة لاستخدام بصمات الأصابع الديناميكية وتحديث بيانات تعريف OTA (باستخدام أدوات OTA) لتضمين اسم الجهاز وبصمة الإصبع في إدخالات الشرط المسبق واللاحق.
حول وحدات SKU
يعد تنسيق SKU بمثابة اختلاف في قيم معلمات البناء المدمجة وعادةً ما يكون مجموعة فرعية غير معلنة من معلمات build_fingerprint
الحالية. يمكن لمصنعي المعدات الأصلية استخدام أي مجموعة من معلمات البناء المعتمدة من CDD لـ SKU أثناء استخدام صورة واحدة أيضًا لوحدات SKU هذه. على سبيل المثال، يحتوي SKU التالي على أشكال متعددة:
SKU = <product><device><modifierA><modifierB><modifierC>
-
modifierA
هو مستوى الجهاز (مثل Pro أو Premium أو Plus) -
modifierB
هو نوع الأجهزة (مثل الراديو) -
modifierC
هي المنطقة التي يمكن أن تكون عامة (مثل NA أو EMEA أو CHN ) أو خاصة ببلد أو لغة معينة (مثل JPN أو ENG أو CHN)
يستخدم العديد من مصنعي المعدات الأصلية صورة واحدة لوحدات SKU متعددة، ثم يستمدون اسم المنتج النهائي وبصمة الجهاز في وقت التشغيل بعد تشغيل الجهاز. تعمل هذه العملية على تبسيط عملية تطوير النظام الأساسي، مما يتيح للأجهزة ذات التخصيصات البسيطة ولكن أسماء المنتجات المختلفة مشاركة الصور المشتركة (مثل 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
تحتوي حزمة 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
بشكل مشروط، مما يتيح التعرف على تجاوزات الخاصية وانعكاسها في بيانات تعريف OTA النهائية.