В SDV используется стандартный для Android подход к A/B-обновлениям системы (без прерывания работы). Документация по AOSP в основном относится к SDV. На этой странице подробно описано использование, характерное для SDV, и известные хорошие пути для создания и применения пакетов обновлений.
SDV настроено на использование невиртуальных A/B-обновлений. Чтобы настроить и запустить A/B-обновления для пользовательского раздела /oem_ab из пакета сервисов, ознакомьтесь со статьей A/B-обновления разделов OEM.
Реализация HAL для управления загрузкой
Образ SDV Core для Cuttlefish (sdv_core_cf) предоставляет стандартную реализацию HAL управления загрузкой на основе hardware/interfaces/boot/aidl/default/. Другие загрузчики должны реализовывать HAL для поддержки обновлений A/B.
Подробную информацию можно найти в разделе Реализация HAL управления загрузкой документации AOSP. Чтобы протестировать реализацию, можно использовать bootctl, включенный в образы SDV для отладки (eng и userdebug).
Как создать пакет OTA
Подробнее о том, как создавать пакеты OTA… Инструкции на этой странице соответствуют документации AOSP с небольшими отклонениями.
Обновление ранее добавленных выпусков
Из корневого каталога хранилища:
source build/envsetup.sh && lunch sdv_core_cf-aosp_current-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output
Эти команды создают целевые файлы в каталоге dist_output. Для локальных сборок sdv_core_cf это обычно sdv_core_cf-target_files-$USER.zip.
Чтобы создать пакет OTA, используйте ota_from_target_files. В отличие от AOSP, пакет не создается как часть m dist.
m ota_from_target_files
ota_from_target_files \
dist_output/sdv_core_cf-target_files-$USER.zip \
ota_update.zip
Дополнительное обновление
Вызов ota_from_target_files, как в AOSP:
ota_from_target_files \
-i PREVIOUS-sdv_core_cf-target_files.zip \
dist_new/sdv_core_cf-target_files-$USER.zip \
incremental_ota_update.zip
Как установить пакет OTA
Обновления устанавливаются с помощью сервиса update_engine. Отладочные сборки SDV включают update_engine_client, который можно использовать для отладки и тестирования процесса обновления.
Чтобы установить пакет OTA, выполните следующую команду:
system/update_engine/scripts/update_device.py ota_update.zip
Если обновление установлено правильно (конечный статус – UPDATE_STATUS_UPDATED_NEED_REBOOT, а результат – ErrorCode::kSuccess), оно будет активировано при следующей перезагрузке.
Управление версиями
Для обновления системы SDV использует метаданные пакета OTA, чтобы определить, соответствует ли пакет OTA требованиям и можно ли его установить.
Для APEX в SDV используются концепции Android, связанные с возможностью обновления. Поэтому обновить можно только те APEX-файлы, которые не являются начальными. Начальная загрузка APEX необходимо обновлять через обновления системы, а также:
- Заявленная версия выше предустановленной, и обе версии больше или равны 1.
или
- Заявленная версия – это непредустановленный APEX-файл, и она выше, чем версия в черном списке (если она там есть).
SDV обычно развертывается в нескольких системах в сети. Поэтому вы должны убедиться, что обновления, внесенные в одну систему, выполняются правильно. Тем не менее, эта забота не гарантирует, что все системы могут правильно взаимодействовать.
Не менее важно обновить сеть в целом. Для этого нужно либо одновременно развернуть пакеты сервисов на всех компьютерах, либо убедиться, что обновления не содержат критических изменений. Например, несовместимые изменения в интерфейсе.
Хотя в SDV нет инструментов для обнаружения несовместимых изменений, в наших рекомендациях описано, как согласовывать изменения, внесенные в интерфейсы, а также приведены рекомендации по развертыванию изменений.
Кроме того, SDV поддерживает механизмы отката для обновлений системы и APEX. Если система непреднамеренно переходит в неудовлетворительное состояние, мы можем восстановить последнее известное удовлетворительное состояние.