Сборка OTA-пакетов

Вы можете использовать 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 , и полученный питон двоичный расположен в 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 для нескольких SKU

Android 11 и выше поддерживает использование одного пакета OTA для нескольких устройств с разными SKU. Для этого необходимо настроить целевые устройства для использования динамических отпечатков пальцев и обновить метаданные OTA (с помощью инструментов OTA), чтобы включить имя устройства и отпечаток пальца в записи до и после состояния.

О артикулах

Формат SKU является разновидностью комбинированных параметров сборки значений и обычно необъявленным подмножество текущего build_fingerprint параметров. OEM-производители могут использовать любую комбинацию утвержденных CDD параметров сборки для SKU, а также использовать один образ для этих SKU. Например, у следующего артикула есть несколько вариантов:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA является уровень устройства (например, Pro, Premium, или Plus)
  • modifierB является изменение аппаратных средств (например, радио)
  • modifierC представляет собой область, которая может быть общим (например, NA, EMEA, или CHN) или страны или конкретного языка (например, JPN, ENG или CHN)

Многие OEM-производители используют один образ для нескольких SKU, а затем получают окончательное название продукта и отпечаток устройства во время выполнения после загрузки устройства. Этот процесс упрощает процесс разработки платформы, что позволяет устройства с незначительными настройками , но разными названиями продуктов , чтобы общими образами (например, tardis и tardispro ).

Использование динамических отпечатков пальцев

Отпечаток представляет собой определенную конкатенации параметров сборки , таких как ro.product.brand , ro.product.name и ro.product.device . Отпечаток устройства является производным от отпечатка системного раздела и используется в качестве уникального идентификатора изображений (и байтов), запущенных на устройстве. Чтобы создать динамический отпечаток пальца, использование динамической логики в устройства build.prop файл , чтобы получить значение загрузчика переменных во время загрузки устройства, а затем использовать эти данные для создания динамических отпечатков пальцев для этого устройства.

Например, чтобы использовать динамические отпечатки пальцев для tardis и tardispro устройств, обновить следующие файлы , как показано ниже.

  • Обновление odm/etc/build_std.prop и odm/etc/build_std.prop файл содержит следующую строку.

    ro.odm.product.device=tardis
    
  • Обновление odm/etc/build_pro.prop и odm/etc/build_pro.prop файл содержит следующую строку.

    ro.odm.product.device=tardispro
    
  • Обновление odm/etc/build.prop и 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 метаданные ОТА для 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.