Las Apps instantáneas son una función clave de Android 10, por lo que es fundamental que funcionen correctamente. Las Apps instantáneas se instalan de forma implícita, por lo que tienen un conjunto de capacidades restringido 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 las Apps instantáneas. Se crea un subconjunto de pruebas de CTS para garantizar que los comportamientos permitidos por las Apps instantáneas funcionen. La idea clave es minimizar el crecimiento del tamaño de CTS aislando el conjunto mínimo de pruebas para la transferencia. 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 las 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:
- Solo pueden tener ciertos permisos.
- No pueden ver otras apps, a menos que estén marcadas como visibles para las Apps instantáneas.
- Solo pueden acceder a ciertos parámetros de configuración del sistema.
- Solo pueden acceder a ciertas propiedades del sistema.
- No pueden exponer servicios ni proveedores.
- Pueden recibir y enviar con reglas especiales en torno a las transmisiones.
Además, las Apps instantáneas deben habilitar la nueva zona de pruebas de seguridad para agregar más restricciones. Esta amplia gama de comportamientos especiales en torno a las Apps instantáneas atraviesa toda la plataforma, por lo que debe haber una forma de validar que las Apps instantáneas funcionen como se espera para todos los dispositivos del ecosistema.
Pruebas que se ejecutan 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 probada por el módulo tiene interacción 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 son aplicables, los usuarios deben determinar qué pruebas de estos módulos son relevantes. Por ejemplo, probar comportamientos específicos del servicio para una arquitectura conectable (por ejemplo, AccessibilityService) no es aplicable para el modo de Apps instantáneas, ya que las Apps instantáneas no pueden exponer servicios a otras apps (incluida la plataforma), mientras que las pruebas que validan los comportamientos del lado de la app son aplicables para el modo de Apps instantáneas. Otro ejemplo es una prueba que valida comportamientos detrás de un permiso que una app instantánea no puede tener, que no son relevantes en el modo de Apps instantáneas. Hay un conjunto de pruebas que se aplican solo a las Apps instantáneas que validan las reglas sobre cómo se comportan, por ejemplo, no exponer servicios o no ver otras apps. Por lo general, ya están escritas y no requieren transferencia.
Errores de prueba en el modo de Apps instantáneas
Si la prueba falla porque valida la funcionalidad a la que las Apps instantáneas no pueden acceder, no es aplicable en el modo de Apps instantáneas. Marca la prueba para que se ejecute solo en el modo de app completa anotándola con @AppModeFull. Puedes aplicar esta anotación al nivel de la clase para excluir todas las pruebas en ella.
Si la prueba falla porque se interrumpe alguna funcionalidad accesible para las Apps instantáneas, informa un error.
Solución de problemas
Si la prueba falla con Failed to install MyCtsModule.apk on DEVICE. Reason: '-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.