Desarrollo del manifiesto del dispositivo

Cuando desarrollan y lanzan dispositivos nuevos, los proveedores pueden definir y declarar la versión de FCM objetivo en el manifiesto del dispositivo (DM). Cuando se actualiza la imagen del proveedor para dispositivos antiguos, los proveedores pueden implementar nuevas versiones de HAL y aumentar la versión de FCM objetivo.

Desarrollar dispositivos nuevos

Cuando definas la versión de FCM objetivo del dispositivo para dispositivos nuevos, haz lo siguiente:

  1. Deja DEVICE_MANIFEST_FILE y PRODUCT_ENFORCE_VINTF_MANIFEST sin definir.
  2. Implementa HALs para la versión de FCM objetivo.
  3. Escribe el archivo de manifiesto del dispositivo correcto.
  4. Escribe la versión de FCM de destino en el archivo de manifiesto del dispositivo.
  5. Establece DEVICE_MANIFEST_FILE.
  6. Establece PRODUCT_ENFORCE_VINTF_MANIFEST en true.

Lanzamiento de dispositivos nuevos

Cuando se lanza un dispositivo nuevo, se debe determinar su versión inicial de FCM de destino y declararla en el manifiesto del dispositivo como el atributo "target-level" en el elemento <manifest> de nivel superior.

Por ejemplo, los dispositivos que se inician con Android 9 deben tener una versión objetivo de FCM igual a 3 (la versión más reciente disponible en este momento). Para declarar esto en el manifiesto del dispositivo, haz lo siguiente:

<manifest version="1.0" type="device" target-level="3">
    <!-- ... -->
</manifest>

Actualiza la imagen del proveedor

Cuando se actualiza la imagen del proveedor de un dispositivo antiguo, los proveedores pueden implementar versiones nuevas de HAL y aumentar la versión de FCM de destino.

Actualiza los HAL

Durante una actualización de imagen del proveedor, los proveedores pueden implementar nuevas versiones de HAL siempre que el nombre de HAL, el nombre de la interfaz y el nombre de la instancia sean los mismos. Por ejemplo:

  • Los dispositivos Google Pixel 2 y Pixel 2 XL se lanzaron con la versión 2 de FCM objetivo, que implementó el HAL de audio 2.0 requerido android.hardware.audio@2.0::IDeviceFactory/default.
  • En el caso del HAL de audio 4.0 que se lanzó con Android 9, los dispositivos Google Pixel 2 y Pixel 2 XL pueden usar una actualización OTA completa para actualizar al HAL 4.0, que implementa android.hardware.audio@4.0::IDeviceFactory/default.
  • Aunque compatibility_matrix.2.xml solo especifica audio 2.0, se relajó el requisito de una imagen del proveedor con la versión 2 de FCM objetivo porque el framework de Android 9 (versión 3 de FCM) considera que el audio 4.0 reemplaza al HAL de audio 2.0 en términos de funcionalidad.

En resumen, dado que compatibility_matrix.2.xml requiere audio 2.0 y compatibility_matrix.3.xml requiere audio 4.0, los requisitos son los siguientes:

Versión de FCM (sistema) Versión de FCM objetivo (proveedor) Requisitos
2 (8.1) 2 (8.1) Audio 2.0
3 (9) 2 (8.1) Audio 2.0 o 4.0
3 (9) 3 (9) Audio 4.0

Actualiza la versión de FCM objetivo

Durante una actualización de imagen del proveedor, los proveedores también pueden incrementar la versión de FCM objetivo para especificar la versión de FCM objetivo con la que puede funcionar la imagen del proveedor actualizada. Para actualizar la versión objetivo de FCM de un dispositivo, los proveedores deben hacer lo siguiente:

  1. Implementa todas las versiones de HAL nuevas requeridas para la versión de FCM objetivo.
  2. Modifica las versiones de HAL en el archivo de manifiesto del dispositivo.
  3. Modifica la versión de FCM de destino en el archivo de manifiesto del dispositivo.
  4. Se quitaron las versiones de HAL obsoletas.

Por ejemplo, los dispositivos Google Pixel y Pixel XL se lanzaron con Android 7.0, por lo que su versión de FCM objetivo debe ser, como mínimo, heredada. Sin embargo, el manifiesto del dispositivo declara la versión 2 de FCM de destino porque la imagen del proveedor se actualizó para cumplir con compatibility_matrix.2.xml:

<manifest version="1.0" type="device" target-level="2">

Si los proveedores no implementan todas las versiones nuevas de HAL requeridas o no quitan las versiones de HAL obsoletas, no se puede actualizar la versión de FCM objetivo.

Por ejemplo, los dispositivos Google Pixel 2 y Pixel 2 XL tienen como objetivo la versión 2 de FCM. Si bien implementan algunos HAL que requiere compatibility_matrix.3.xml (como audio 4.0, salud 2.0, etcétera), no quitan android.hardware.radio.deprecated@1.0, que dejó de estar disponible en la versión 3 de FCM (Android 9). Por lo tanto, estos dispositivos no pueden actualizar la versión de FCM de destino a la 3.

Cómo aplicar requisitos de kernel obligatorios durante la actualización OTA

Actualización de dispositivos desde Android 9 o versiones anteriores

En dispositivos con Android 9 o versiones anteriores, asegúrate de que se seleccionen los siguientes CL:

Estos cambios introducen la marca de compilación PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS y dejan la marca sin definir para los dispositivos lanzados con Android 9 o versiones anteriores.

  • Cuando se actualiza a Android 10, los clientes OTA en dispositivos con Android 9 o versiones anteriores no verifican correctamente los requisitos del kernel en el paquete OTA. Estos cambios son necesarios para quitar los requisitos del kernel del paquete OTA generado.
  • Cuando se actualiza a Android 11, es opcional establecer la marca de compilación PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS para verificar la compatibilidad de VINTF cuando se genera el paquete de actualización.

Para obtener más información sobre esta marca de compilación, consulta Cómo actualizar dispositivos desde Android 10.

Actualización de dispositivos desde Android 10

Android 10 presenta una nueva marca de compilación, PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS. En el caso de los dispositivos que se lanzaron con Android 10, esta marca se establece automáticamente en true. Cuando la marca se establece en true, una secuencia de comandos extrae la versión y la configuración del kernel de la imagen del kernel instalada.

  • Cuando se actualiza a Android 10, el paquete de actualización OTA contiene la versión y la configuración del kernel. Los clientes OTA en dispositivos que ejecutan Android 10 leen esta información para verificar la compatibilidad.
  • Cuando se actualiza a Android 11, la generación de paquetes OTA lee la versión y la configuración del kernel para verificar la compatibilidad.

Si la secuencia de comandos no extrae esta información para tu imagen de kernel, haz una de las siguientes acciones:

  • Edita la secuencia de comandos para admitir tu formato de kernel y contribuir a AOSP.
  • Establece BOARD_KERNEL_VERSION en la versión del kernel y BOARD_KERNEL_CONFIG_FILE en la ruta de acceso del archivo de configuración del kernel compilado .config. Ambas variables se deben actualizar cuando se actualiza la imagen del kernel.
  • Como alternativa, configura PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS como false para omitir la verificación de los requisitos del kernel. Esto no se recomienda, ya que cualquier incompatibilidad se oculta y solo se descubre cuando se ejecutan pruebas de VTS después de la actualización.

Puedes ver el código fuente de la secuencia de comandos de extracción de información del kernel extract_kernel.py.