É possível ativar as atualizações OTA (over-the-air) baseadas em blocos para novos dispositivos com o Android 5.0. A OTA é o mecanismo pelo qual os OEMs atualizam remotamente a partição do sistema de um dispositivo:
- O Android 5.0 e as versões mais recentes usam atualizações OTA de bloco para garantir que cada dispositivo use exatamente a mesma partição. Em vez de comparar arquivos individuais e calcular patches binários, o OTA em bloco processa a partição inteira como um arquivo e calcula um único patch binário, garantindo que a partição resultante contenha exatamente os bits pretendidos. Isso permite que a imagem do sistema do dispositivo atinja o mesmo estado por fastboot ou OTA.
- O Android 4.4 e versões anteriores usavam atualizações OTA de arquivos, que garantiam que os dispositivos contivessem conteúdos, permissões e modos de arquivos semelhantes, mas permitiam que metadados como carimbos de data/hora e o layout do armazenamento subjacente variassem entre os dispositivos com base no método de atualização.
Como o OTA em bloco garante que cada dispositivo use a mesma partição, ele permite o uso de dm-verity para assinar criptograficamente a partição do sistema. Para mais detalhes sobre dm-verity, consulte Inicialização verificada.
Observação:é necessário ter um sistema OTA de bloco em funcionamento antes de usar o dm-verity.
Recomendações
Para dispositivos lançados com o Android 5.0 ou versões mais recentes, use o bloqueio de atualizações OTA na ROM de fábrica. Para
gerar um OTA baseado em bloco para atualizações subsequentes, transmita a opção --block
para
ota_from_target_files
.
Para dispositivos lançados com o Android 4.4 ou versões anteriores, use as atualizações OTA de arquivos. É possível fazer a transição de dispositivos enviando um OTA de bloco completo do Android 5.0 ou mais recente, mas isso exige o envio de um OTA completo significativamente maior do que um OTA incremental. Por isso, não é recomendado.
Como o dm-verity exige suporte ao carregador de inicialização, encontrado apenas em novos dispositivos com o Android 5.0 ou mais recente, não é possível ativar o dm-verity em dispositivos atuais.
Os desenvolvedores que trabalham no sistema Android OTA (a imagem de recuperação e os scripts que geram OTAs) podem acompanhar as mudanças se inscrevendo na lista de e-mails android-ota@googlegroups.com.
OTAs de arquivo x OTAs de bloco
Durante uma OTA baseada em arquivos, o Android tenta mudar o conteúdo da partição do sistema na camada do sistema de arquivos (arquivo por arquivo). Não há garantia de que a atualização gravará arquivos em uma ordem consistente, terá um superbloco ou um horário de modificação anterior consistente ou até mesmo colocará os blocos no mesmo local no dispositivo de bloco. Por esse motivo, as OTAs baseadas em arquivos falham em um dispositivo com dm-verity ativado. Após a tentativa de OTA, o dispositivo não inicializa.
Durante um OTA baseado em blocos, o Android oferece ao dispositivo a diferença entre as duas imagens de bloco (em vez de dois conjuntos de arquivos). A atualização verifica um build de dispositivo com o servidor de build correspondente no nível do bloco (abaixo do sistema de arquivos) usando um dos seguintes métodos:
- Atualização completa. Copiar a imagem completa do sistema é simples e facilita a geração de patches, mas também gera imagens grandes que podem tornar a aplicação de patches cara.
- Atualização incremental. O uso de uma ferramenta de diferença binária gera imagens menores e facilita a aplicação de patches, mas consome muita memória ao gerar o patch.
Observação:o adb fastboot
coloca exatamente os mesmos bits no dispositivo como um
OTA completo, portanto, o flash é compatível com o OTA em bloco.
Atualizar sistemas não modificados
Para dispositivos com partições do sistema não modificadas com o Android 5.0, o processo de download e instalação de um OTA de bloco é o mesmo de um OTA de arquivo. No entanto, a atualização OTA pode incluir uma ou mais das seguintes diferenças:
-
Tamanho do download.
As atualizações OTA de bloco completo têm aproximadamente o mesmo tamanho que as atualizações OTA de arquivo completo, e as atualizações incrementais podem ser apenas alguns megabytes maiores.
Figura 1. Comparação dos tamanhos de OTA do Nexus 6 entre as versões do Android 5.0 e do Android 5.1 (mudanças de destino do build)
Em geral, as atualizações OTA de blocos incrementais são maiores do que as atualizações OTA de arquivos incrementais devido a:
- Preservação de dados. As OTAs baseadas em blocos preservam mais dados (metadados de arquivos, dados dm-verity, layout ext4 etc.) do que as OTAs baseadas em arquivos.
- Diferenças nos algoritmos de computação. Em uma atualização OTA de arquivo, se um caminho de arquivo for igual nos dois builds, o pacote OTA não conterá dados para esse arquivo. Em uma atualização OTA em bloco, a determinação de poucas ou nenhuma mudança em um arquivo depende da qualidade do algoritmo de computação do patch e do layout dos dados do arquivo no sistema de origem e de destino.
- Sensibilidade a flash e RAM com falhas. Se um arquivo estiver corrompido, o OTA do arquivo terá sucesso, desde que não toque no arquivo corrompido, mas um OTA de bloco falhará se detectar qualquer corrupção na partição do sistema.
Atualizar sistemas modificados
Para dispositivos com partições do sistema modificadas com o Android 5.0:
-
As atualizações OTA de blocos incrementais falham. Uma partição do sistema pode ser modificada durante uma
adb remount
ou como resultado de malware. O OTA de arquivo tolera algumas mudanças na partição, como a adição de arquivos que não fazem parte do build de origem ou de destino. No entanto, o OTA de bloco não tolera adições à partição. Portanto, os usuários precisam instalar um OTA completo, substituindo todas as modificações da partição do sistema, ou atualizar uma nova imagem do sistema para ativar futuros OTAs. - As tentativas de mudar arquivos modificados causam falhas na atualização. Para atualizações OTA de arquivos e blocos, se a OTA tentar mudar um arquivo modificado, a atualização OTA vai falhar.
- As tentativas de acesso a arquivos modificados geram erros (somente dm-verity). Para atualizações OTA de arquivos e blocos, se o dm-verity estiver ativado e o OTA tentar acessar partes modificadas do sistema de arquivos do sistema, o OTA vai gerar um erro.