Atualizações do sistema A/B

O SDV segue a abordagem padrão do Android de atualizações do sistema A/B (contínuas). A documentação do AOSP se aplica principalmente ao SDV. Esta página detalha o uso específico para SDV e caminhos conhecidos para criar e aplicar pacotes de atualização.

O SDV está configurado para usar atualizações A/B não virtuais. Para configurar e acionar atualizações A/B para uma partição /oem_ab personalizada de um pacote de serviços, consulte Atualizações de partição AB do OEM.

Implementar a HAL de controle de inicialização

A imagem do SDV Core para Cuttlefish (sdv_core_cf) oferece uma implementação padrão da HAL de controle de inicialização com base em hardware/interfaces/boot/aidl/default/. Outros carregadores de inicialização precisam implementar a HAL para oferecer suporte a atualizações A/B.

Consulte a seção Implementar a HAL de controle de inicialização da documentação do AOSP para mais detalhes. Use o bootctl incluído nas imagens SDV de depuração (eng e userdebug) para testar a implementação.

Gerar um pacote OTA

Para saber mais, consulte: Criar pacotes OTA. As instruções nesta página seguem a documentação do AOSP com pequenos desvios.

Atualização completa

Na raiz do repositório:

source build/envsetup.sh && lunch sdv_core_cf-aosp_current-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output

Esses comandos produzem arquivos de destino no diretório dist_output. Para builds locais de sdv_core_cf, normalmente é sdv_core_cf-target_files-$USER.zip.

Para produzir um pacote OTA, use ota_from_target_files. Ao contrário do AOSP, o pacote não é criado como parte de m dist.

m ota_from_target_files
ota_from_target_files \
  dist_output/sdv_core_cf-target_files-$USER.zip \
  ota_update.zip

Atualização incremental

Mesma invocação de ota_from_target_files que no 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

Instalar um pacote OTA

As atualizações são instaladas usando o serviço update_engine. As versões de depuração de SDV incluem update_engine_client, que pode ser usado para depurar e testar o processo de atualização.

Para instalar um pacote OTA, execute:

system/update_engine/scripts/update_device.py ota_update.zip

Se a atualização for instalada corretamente (o status final é UPDATE_STATUS_UPDATED_NEED_REBOOT e o resultado é ErrorCode::kSuccess), ela será ativada na próxima reinicialização.

Controle de versões

Para atualizações do sistema, o SDV usa os metadados do pacote OTA do Android para determinar se um pacote OTA atende aos requisitos e pode ser instalado.

Também para o APEX, o SDV segue os conceitos do Android em relação à capacidade de atualização. Portanto, um APEX pode ser atualizado quando não é um APEX de inicialização. O APEX de inicialização precisa ser atualizado por atualizações do sistema e:

  • A versão declarada é maior que a versão pré-instalada, e ambas são maiores ou iguais a 1.

ou

  • A versão declarada é um APEX não pré-instalado, e a versão é mais recente que a versão na lista de bloqueio, se listada.

O SDV geralmente é implantado em vários sistemas em uma rede. Portanto, é preciso garantir que as atualizações feitas em um único sistema sejam executadas corretamente. No entanto, esse cuidado não garante que todos os sistemas possam se comunicar corretamente.

Também é fundamental atualizar a rede como um todo, o que exige que as atualizações dos pacotes de serviços sejam implantadas em todas as máquinas ao mesmo tempo ou que não contenham alterações interruptivas. Por exemplo, mudanças incompatíveis na interface.

Embora o SDV não ofereça ferramentas para detectar mudanças incompatíveis, nossas diretrizes descrevem como reconciliar mudanças feitas em interfaces, além das práticas recomendadas necessárias para implantar as mudanças.

Além disso, o SDV oferece suporte a mecanismos de reversão para atualizações do sistema e do APEX. Se o sistema entrar acidentalmente em um estado insatisfatório, podemos recuperar o último estado satisfatório conhecido.