Вы можете использовать инструмент 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
как двоичный файл 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 добавочных обновлений. Это помогает пользователям получить последнюю версию и избежать длительной последовательности установки добавочных обновлений.
Создание пакетов OTA для нескольких SKU
Android 11 или более поздней версии поддерживает использование одного пакета OTA для нескольких устройств с разными SKU. Для этого требуется настроить целевые устройства для использования динамических отпечатков пальцев и обновить метаданные OTA (с помощью инструментов OTA), чтобы включить имя устройства и отпечаток пальца в записи до и после условия.
О SKU
Формат 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
, чтобы он содержал следующую строку.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.