Módulo de ayuda de interacción con dispositivos CTS

En Android 11 y versiones posteriores, los módulos de ayuda para la interacción del dispositivo del Conjunto de pruebas de compatibilidad (CTS) te permiten personalizar la forma en que ciertas pruebas de CTS interactúan con la interfaz de usuario (IU) en un dispositivo específico. Esto significa que se pueden realizar acciones, como reemplazar un elemento de la IU que no está cubierto por el Documento de Definición de Compatibilidad (CDD) o la documentación de la API, y aun así aprobar el CTS.

Los OEM que deseen personalizar la IU de Android durante el desarrollo del producto y necesiten aprobar las CTS pueden implementar módulos de ayuda. Si usas la implementación predeterminada de Android, no es necesario que realices ninguna acción adicional.

Implementa módulos auxiliares

Requisitos para personalizar la IU

Verifica los módulos del CDD o Mainline para conocer los requisitos de la IU. Si la IU deseada está cubierta por los módulos de CDD o Mainline, no se puede personalizar.

Si las pruebas del CTS que interactúan con la IU deseada no usan el framework de ayuda, esa IU no se puede personalizar. Trabaja con el propietario de la prueba para convertir el módulo de prueba antes de que se pueda cambiar la IU.

De lo contrario, puedes personalizar la IU.

Flujo de trabajo de implementación

  1. Personaliza la IU según sea necesario para tu producto específico.
  2. Designa los módulos de ayuda existentes de AOSP como subclases para los módulos de prueba de CTS que necesitan interactuar con la IU. Reemplaza las interacciones necesarias de forma adecuada para la IU personalizada. Los reemplazos varían según el tipo de cambios.
    • Las subclases del OEM se encuentran en un paquete del OEM, como com.[oem].cts.helpers.
    • Cada subclase de OEM se denomina con un prefijo común que la distingue de la implementación de AOSP, que tiene el prefijo Default.
  3. Compila los asistentes en un APK siguiendo estas convenciones del ejecutor de pruebas.
    • Android.bp debe declarar android_test_helper_app con el mismo nombre que el paquete contenido.
    • AndroidManifest.xml del APK debe declarar una propiedad de metadatos llamada interaction-helpers-prefix con el valor del prefijo de clase elegido en el punto anterior.
    • La app debe depender de cts-helpers-core, cts-helpers-interfaces y com.android.cts.helpers.aosp. Si los asistentes del OEM implementan por completo todas las interfaces pertinentes, com.android.cts.helpers.aosp es opcional.
  4. Establece la propiedad ro.vendor.cts_interaction_helper_packages en la imagen del dispositivo para incluir el nombre del APK. Si necesitas separar las implementaciones de tu asistente en varios APKs, esta propiedad puede contener una lista de paquetes separados por dos puntos.
  5. Asegúrate de que el APK esté disponible en el directorio testcases cuando ejecutes Tradefed para CTS. Si es necesario, confirma que se haya elegido la clase de implementación del asistente esperada examinando los mensajes de logcat.
  6. Opcional, pero altamente recomendado: Envía tu implementación de asistente a AOSP o hazla disponible para pruebas de terceros.

Ejemplo de implementación de asistente

Por ejemplo, CtsPrintTestCases espera un asistente con la interfaz definida en ICtsPrintHelper. La implementación de AOSP se llama com.android.cts.helpers.aosp.DefaultCtsPrintHelper.

Si personalizas la IU de impresión, puedes crear com.oem.cts.helpers.OemCtsPrintHelper que sean subclases de DefaultCtsPrintHelper. android_test_helper_app en Android.bp se llama com.oem.cts.helpers, lo que produce com.oem.cts.helpers.apk y declara interaction-helpers-prefix como Oem en AndroidManifest.xml.

La propiedad del dispositivo ro.vendor.cts_interaction_helper_packages se establece en com.oem.cts.helpers.

Implementaciones de referencia

Las implementaciones de referencia incluyen interfaces en cts/libs/helpers y los asistentes predeterminados de AOSP en cts/helpers. La interfaz de nivel superior se documenta en cts/libs/helpers/core/src/com/android/cts/helpers/ICtsDeviceInteractionHelper.java.

Para conectar la prueba de CTS con sus asistentes, los propietarios de la prueba pueden usar la definición de @Rule que se documenta en cts/libs/helpers/core/src/com/android/cts/helpers/DeviceInteractionHelperRule.java.

Cada módulo del CTS que usa el framework y su comportamiento auxiliar esperado se documenta en una interfaz definida en cts/libs/helpers/core/src/com/android/cts/helpers.

Cómo ejecutar pruebas de CTS

Pruebas sin asistentes

A excepción de una propiedad, la opción para realizar pruebas sin asistentes no existe en el tiempo de ejecución en el dispositivo, pero modifica de forma opcional la forma en que las pruebas de CTS interactúan con el dispositivo. Si necesitas ejecutar el CTS sin las implementaciones de ayuda, tienes dos opciones:

  • Quita la propiedad ro.vendor.cts_interaction_helper_packages del dispositivo. Esto evita que los asistentes se usen en esa compilación por completo.
  • Quita el APK de ayuda del directorio testcases antes de ejecutar el CTS. Esto evita que se usen los asistentes en cualquier ejecución hasta que el APK se restablezca a testcases.

Puedes modificar la configuración predeterminada con argumentos de Tradefed y el control de propiedades ro.vendor.cts_interaction_helper_packages, que es donde se carga el APK auxiliar.

Consulta lo siguiente para conocer los valores o rangos esperados para cada uno de los parámetros de configuración disponibles.

  • ro.vendor.cts_interaction_helper_packages es una cadena separada por dos puntos que contiene nombres de paquetes. Puede tomar cualquier valor que sea una opción de paquete válida para la implementación del asistente del OEM.
  • cts-tradefed acepta un argumento device-interaction-helper:property-name que cambia temporalmente la propiedad esperada para una ejecución de prueba, como --module-arg 'CtsPrintTestCases:{device-interaction-helper}property-name:debug.cts.hlp'. El valor del nombre de la propiedad puede ser cualquier propiedad que establezcas en el dispositivo. El valor de la propiedad sigue las mismas restricciones que la propiedad ro.vendor.cts_interaction_helper_packages descrita anteriormente.

Pruebas con personalizaciones

De forma predeterminada, las implementaciones de referencia aprueban el CTS en Android estándar. Verifica que las implementaciones de socios pasen la CTS con personalizaciones de la IU. Ejecuta los módulos del CTS que cubran la IU o las funciones que personalizaste.

Es posible que algunos módulos o asistentes del CTS aún no admitan ciertas personalizaciones.

  • Es posible que un módulo del CTS que interactúe con la IU que deseas personalizar no use el framework de ayuda. Se espera que los módulos del CTS se conviertan al framework de ayuda según la demanda y las prioridades del propietario de la prueba. Solicita archivos para la conversión al principio del proceso para garantizar que la conversión se incluya en la programación, de manera similar a la solicitud de cambios en el CTS para admitir las funciones planificadas.
  • Es posible que las funciones proporcionadas por un asistente existente no aborden por completo las personalizaciones que deseas realizar. Las funciones de ayuda deben abstraer las dependencias de la IU. Si una función auxiliar tiene una dependencia de la IU de forma indirecta, esto se puede tratar de manera similar a los errores en el CTS.