Puedes habilitar las actualizaciones inalámbricas (OTA) basadas en bloques para dispositivos nuevos que ejecutan Android 5.0. La actualización OTA es el mecanismo mediante el cual los OEMs actualizan de forma remota la partición del sistema de un dispositivo:
- Android 5.0 y versiones posteriores usan actualizaciones OTA de bloqueo para garantizar que cada dispositivo use la misma partición. En lugar de comparar archivos individuales y calcular parches binarios, la OTA de bloques controla toda la partición como un solo archivo y calcula un solo parche binario, lo que garantiza que la partición resultante contenga exactamente los bits previstos. Esto permite que la imagen del sistema del dispositivo alcance el mismo estado a través de fastboot o OTA.
- Android 4.4 y versiones anteriores usaban actualizaciones OTA de archivos, lo que garantizaba que los dispositivos tuvieran contenidos, permisos y modos de archivos similares, pero permitía que los metadatos, como las marcas de tiempo y el diseño del almacenamiento subyacente, variaran entre los dispositivos según el método de actualización.
Debido a que la actualización OTA por bloques garantiza que cada dispositivo use la misma partición, permite el uso de dm-verity para firmar criptográficamente la partición del sistema. Para obtener más información sobre dm-verity, consulta Inicio verificado.
Nota: Debes tener un sistema OTA de bloqueo en funcionamiento antes de usar dm-verity.
Recomendaciones
En el caso de los dispositivos que se lanzan con Android 5.0 o versiones posteriores, usa el bloqueo de actualizaciones OTA en la ROM de fábrica. Para generar una OTA basada en bloques para actualizaciones posteriores, pasa la opción --block
a ota_from_target_files
.
En el caso de los dispositivos que se lanzaron con Android 4.4 o versiones anteriores, usa las actualizaciones inalámbricas de archivos. Si bien es posible realizar la transición de dispositivos mediante el envío de una actualización OTA de bloque completo de Android 5.0 o versiones posteriores, se requiere enviar una actualización OTA completa que es mucho más grande que una actualización OTA incremental (por lo que no se recomienda).
Debido a que dm-verity requiere compatibilidad con el bootloader que solo se encuentra en dispositivos nuevos que se envían con Android 5.0 o versiones posteriores, no puedes habilitar dm-verity para dispositivos existentes.
Los desarrolladores que trabajan en el sistema inalámbrico de Android (la imagen de recuperación y las secuencias de comandos que generan actualizaciones OTA) pueden mantenerse al tanto de los cambios si se suscriben a la lista de distribución android-ota@googlegroups.com.
Comparación entre las actualizaciones OTA de archivos y de bloques
Durante una actualización OTA basada en archivos, Android intenta cambiar el contenido de la partición del sistema en la capa del sistema de archivos (archivo por archivo). No se garantiza que la actualización escriba archivos en un orden coherente, tenga una hora de última modificación o un superbloque coherentes, o incluso coloque los bloques en la misma ubicación en el dispositivo de almacenamiento en bloques. Por este motivo, las actualizaciones inalámbricas basadas en archivos fallan en un dispositivo habilitado para dm-verity. Después del intento de actualización inalámbrica, el dispositivo no se inicia.
Durante una actualización inalámbrica basada en bloques, Android envía al dispositivo la diferencia entre las dos imágenes de bloques (en lugar de dos conjuntos de archivos). La actualización verifica una compilación de dispositivo en el servidor de compilación correspondiente a nivel de bloque (debajo del sistema de archivos) con uno de los siguientes métodos:
- Actualización completa. Copiar la imagen completa del sistema es sencillo y facilita la generación de parches, pero también genera imágenes grandes que pueden hacer que la aplicación de parches sea costosa.
- Actualización incremental: El uso de una herramienta de diferencia binaria genera imágenes más pequeñas y facilita la aplicación de parches, pero requiere mucha memoria cuando se genera el parche.
Nota: adb fastboot
coloca exactamente los mismos bits en el dispositivo que una actualización OTA completa, por lo que la actualización con memoria flash es compatible con la actualización OTA por bloques.
Actualiza los sistemas no modificados
En el caso de los dispositivos con particiones del sistema no modificadas que ejecutan Android 5.0, el proceso de descarga e instalación de una actualización OTA de bloque sigue siendo el mismo que para una actualización OTA de archivo. Sin embargo, la actualización OTA puede incluir una o más de las siguientes diferencias:
-
Tamaño de descarga.
Las actualizaciones OTA de bloque completo tienen aproximadamente el mismo tamaño que las actualizaciones OTA de archivo completo, y las actualizaciones incrementales pueden ser solo unos pocos megabytes más grandes.
Figura 1: Comparar los tamaños de OTA del Nexus 6 entre las versiones de Android 5.0 y Android 5.1 (variación de cambios en la compilación de destino)
En general, las actualizaciones OTA de bloques incrementales son más grandes que las actualizaciones OTA de archivos incrementales debido a lo siguiente:
- Preservación de datos. Las actualizaciones OTA basadas en bloques conservan más datos (metadatos de archivos, datos de dm-verity, diseño ext4, etcétera) que las OTA basadas en archivos.
- Diferencias en los algoritmos de procesamiento. En una actualización inalámbrica de archivos, si una ruta de acceso es idéntica en ambas compilaciones, el paquete inalámbrico no contiene datos para ese archivo. En una actualización OTA de bloque, determinar si hay pocos cambios o ninguno en un archivo depende de la calidad del algoritmo de procesamiento del parche y del diseño de los datos de archivos en el sistema de origen y de destino.
- Sensibilidad a la RAM y al flash defectuosos Si un archivo está dañado, la OTA de archivos se realiza correctamente, siempre que no toque el archivo dañado, pero la OTA de bloques falla si detecta algún daño en la partición del sistema.
Actualiza los sistemas modificados
Para dispositivos con particiones del sistema modificadas que ejecutan Android 5.0:
-
No se pueden realizar actualizaciones OTA de bloques incrementales. Es posible que una partición del sistema se modifique durante un
adb remount
o como resultado de software malicioso. La actualización OTA de archivos tolera algunos cambios en la partición, como la adición de archivos que no forman parte de la compilación de destino o de origen. Sin embargo, la actualización OTA por bloques no tolera que se agregue a la partición, por lo que los usuarios deberán instalar una actualización OTA completa que reemplace cualquier modificación de la partición del sistema o escribir en la memoria flash una nueva imagen del sistema para habilitar actualizaciones OTA futuras. - Los intentos de cambiar los archivos modificados provocan errores de actualización. En el caso de las actualizaciones OTA de archivos y bloques, si la OTA intenta cambiar un archivo que se modificó, la actualización OTA falla.
- Los intentos de acceso a archivos modificados generan errores (solo dm-verity). En el caso de las actualizaciones OTA de archivos y de bloques, si dm-verity está habilitado y la OTA intenta acceder a partes modificadas del sistema de archivos, la OTA genera un error.