CTS para apps instantáneas

Las apps instantáneas son una función clave de Android 10, por lo que es esencial que funcionen correctamente. Las apps instantáneas se instalan de forma implícita, por lo que tienen un conjunto restringido de capacidades y se ejecutan en una zona de pruebas de seguridad más restrictiva. Debido a la naturaleza generalizada de estas restricciones, cualquier parte del sistema corre el riesgo de no funcionar correctamente con Apps instantáneas. Se crea un subconjunto de prueba de CTS para garantizar que funcionen los comportamientos permitidos por las Apps instantáneas. La idea clave es minimizar el crecimiento de tamaño de CTS aislando el conjunto mínimo de pruebas para portarlas. El CTS que se ejecuta en el modo de apps instantáneas implica instalar el APK de prueba como una app instantánea y ejecutar las pruebas.

Restricciones de apps instantáneas

El usuario no instala las Apps instantáneas, por lo que se ejecutan en una zona de pruebas restringida con las siguientes restricciones:

  • Puede tener solo ciertos permisos.
  • No se pueden ver otras apps, a menos que estén marcadas como visibles para las apps instantáneas.
  • Solo puede acceder a ciertos parámetros de configuración del sistema.
  • Solo puede acceder a ciertas propiedades del sistema.
  • No se pueden exponer servicios o proveedores.
  • Pueden recibir y enviar mensajes con reglas especiales para las transmisiones.

Además, las apps instantáneas deben habilitar la nueva zona de pruebas de seguridad para agregar más restricciones. Esta amplia variedad de comportamientos especiales en torno a las apps instantáneas se extiende a toda la plataforma, por lo que debe haber una forma de validar que las apps instantáneas funcionen como se espera en todos los dispositivos del ecosistema.

Pruebas en ejecución en el modo de apps instantáneas

No todos los módulos de CTS tienen pruebas aplicables a las apps instantáneas. Si la funcionalidad que prueba el módulo interactúa con el servidor del sistema, estas pruebas deben ejecutarse en el modo de apps instantáneas. Por ejemplo, las pruebas de OpenGL no interactúan con el servidor del sistema, por lo que no es necesario ejecutarlas en el modo de apps instantáneas, mientras que las pruebas de accesibilidad interactúan con el servidor del sistema, pero es necesario ejecutarlas en el modo de apps instantáneas.

Además de identificar qué módulos se pueden aplicar, los usuarios deben determinar qué pruebas de ellos son relevantes. Por ejemplo, las pruebas de comportamientos específicos del servicio para una arquitectura conectable (por ejemplo, AccessibilityService) no se aplican al modo de app instantánea, ya que estas apps no pueden exponer servicios a otras apps (incluida la plataforma), mientras que las pruebas que validan los comportamientos de la app son aplicables para el modo de Apps instantáneas. Otro ejemplo es una prueba que valida los comportamientos detrás de un permiso que una app instantánea no puede contener no son relevantes en el modo de app instantánea. Hay un conjunto de pruebas que se aplican solo a las apps instantáneas que validan las reglas sobre su comportamiento, por ejemplo, no exponer servicios o no ver otras apps. Por lo general, ya están escritos y no requieren portabilidad.

Prueba fallas en el modo de Apps instantáneas

Si la prueba falla porque valida una funcionalidad a la que no pueden acceder las apps instantáneas, entonces no se aplica en el modo de apps instantáneas. Para marcar la prueba de modo que se ejecute solo en el modo de app completa, anótala con @AppModeFull. Puedes aplicar esta anotación al nivel de la clase para excluir todas las pruebas que contiene.

Si la prueba falla porque no funciona alguna funcionalidad a la que pueden acceder las apps instantáneas, informa un error.

Solución de problemas

Si la prueba falla con el mensaje Failed to install MyCtsModule.apk on DEVICE. Motivo: "-116", busca mensajes de PackageManager en logcat. Por ejemplo, si dice Can't replace Full App with Instant App: your_app, primero desinstala tu app con adb.