Actualizaciones del sistema A/B

El SDV sigue el enfoque estándar de Android de las actualizaciones de sistema (optimizadas) A/B. La documentación del AOSP se aplica principalmente al SDV. En esta página, se detallan los usos específicos del SDV y las rutas correctas conocidas para compilar y aplicar paquetes de actualización.

Por el momento, el SDV está configurado para usar actualizaciones A/B no virtuales.

Implementa el HAL de control de arranque

La imagen principal del SDV para Cuttlefish (sdv_core_cf) proporciona una implementación estándar del HAL de control de arranque basada en hardware/interfaces/boot/aidl/default/. Otros cargadores de arranque deben implementar el HAL para admitir actualizaciones A/B.

Consulta la sección Implementa el HAL de control de arranque de la documentación del AOSP para obtener más información. Puedes usar bootctl incluido en las imágenes de SDV de depuración (eng y userdebug) para probar la implementación.

Genera un paquete inalámbrico

Para obtener más información, consulta Cómo compilar paquetes inalámbricos. Las instrucciones de esta página siguen la documentación del AOSP con pequeñas desviaciones.

Actualización completa

Desde la raíz del repositorio, haz lo siguiente:

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

Estos comandos producen archivos de destino en el directorio dist_output. Para las compilaciones locales de sdv_core_cf, suele ser sdv_core_cf-target_files-$USER.zip.

Para producir un paquete inalámbrico, debes usar ota_from_target_files. A diferencia del AOSP, el paquete no se compila 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

Actualización incremental

La misma invocación de ota_from_target_files que en 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

Instala un paquete inalámbrico

Las actualizaciones se instalan con el servicio update_engine. Las compilaciones de SDV de depuración incluyen update_engine_client, que se puede usar para depurar y probar el proceso de actualización.

Para instalar un paquete inalámbrico, ejecuta lo siguiente:

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

Si la actualización se instala correctamente (el estado final es UPDATE_STATUS_UPDATED_NEED_REBOOT y el resultado es ErrorCode::kSuccess), se activará en el próximo reinicio.

Control de versiones

Para las actualizaciones del sistema, el SDV usa los metadatos del paquete inalámbrico de Android para determinar si un paquete inalámbrico cumple con los requisitos y se puede instalar.

También para APEX, el SDV sigue los conceptos de Android con respecto a la capacidad de actualización. Por lo tanto, se puede actualizar un APEX cuando no es un APEX de bootstrap. El APEX de bootstrap se debe actualizar a través de las actualizaciones del sistema y de una de las siguientes maneras:

  • La versión declarada es superior a la versión preinstalada, y ambas son mayores o iguales que 1.

o bien,

  • La versión declarada es un APEX no preinstalado y la versión es superior a la versión de la lista de bloqueados, si aparece.

Por lo general, el SDV se implementa en varios sistemas de una red. Por lo tanto, debes asegurarte de que las actualizaciones realizadas en un solo sistema se ejecuten correctamente. Aun así, este cuidado no garantiza que todos los sistemas puedan comunicarse correctamente.

Es igualmente fundamental que actualices la red general, lo que requiere que las actualizaciones de los paquetes de servicios se implementen en todas las máquinas al mismo tiempo o que las actualizaciones no contengan cambios rotundos. Por ejemplo, cambios incompatibles en la interfaz.

Aunque el SDV no proporciona herramientas para detectar cambios incompatibles, nuestras instrucciones describen cómo conciliar los cambios realizados en las interfaces, así como las prácticas recomendadas necesarias para implementar los cambios.

Además, el SDV admite mecanismos de reversión para las actualizaciones del sistema y de APEX. Si el sistema ingresa de forma involuntaria a un estado insatisfactorio, podemos recuperar el último estado satisfactorio conocido.