CTS pour les applis instantanées

Les applis instantanées sont une fonctionnalité clé d'Android 10. Il est donc essentiel qu'elles fonctionnent correctement. Les applis instantanées sont installées de manière implicite. Elles disposent donc d'un ensemble de fonctionnalités limité et s'exécutent dans un bac à sable de sécurité plus restrictif. En raison de la nature omniprésente de ces restrictions, n'importe quelle partie du système risque de ne pas fonctionner correctement avec les applis instantanées. Un sous-ensemble de tests CTS est créé pour s'assurer que les comportements autorisés par les applis instantanées fonctionnent. L'idée principale est de minimiser la croissance de la taille de CTS en isolant l'ensemble minimal de tests à transférer. L'exécution de CTS en mode Applis instantanées implique l'installation de l'APK de test en tant qu'appli instantanée et l'exécution des tests.

Restrictions des applis instantanées

Les applis instantanées ne sont pas installées par l'utilisateur. Elles s'exécutent donc dans un bac à sable restreint avec les restrictions suivantes :

  • Ne peuvent détenir que certaines autorisations.
  • Ne peuvent pas voir d'autres applications, sauf si elles sont marquées comme visibles pour les applis instantanées.
  • Ne peuvent accéder qu'à certains paramètres système.
  • Ne peuvent accéder qu'à certaines propriétés système.
  • Ne peuvent pas exposer de services/fournisseurs.
  • Peuvent recevoir et envoyer des diffusions avec des règles spéciales.

De plus, les applis instantanées doivent accepter que le nouveau bac à sable de sécurité ajoute d'autres restrictions. Cette large gamme de comportements spéciaux autour des applis instantanées traverse l'ensemble de la plate-forme. Il est donc nécessaire de valider que les applis instantanées fonctionnent comme prévu pour tous les appareils de l'écosystème.

Tests exécutés en mode Applis instantanées

Tous les modules CTS ne comportent pas de tests applicables aux applis instantanées. Si la fonctionnalité testée par le module interagit avec le serveur système, ces tests doivent être exécutés en mode Applis instantanées. Par exemple, les tests OpenGL n'interagissent pas avec le serveur système. Il n'est donc pas nécessaire de les exécuter en mode Applis instantanées, tandis que les tests d'accessibilité interagissent avec le serveur système et doivent être exécutés en mode Applis instantanées.

En plus d'identifier les modules applicables, les utilisateurs doivent déterminer les tests pertinents dans ces modules. Par exemple, le test des comportements spécifiques à un service pour une architecture enfichable (par exemple, AccessibilityService) n'est pas applicable au mode Applis instantanées, car les applis instantanées ne peuvent pas exposer de services à d'autres applications (y compris la plate-forme), tandis que les tests validant les comportements côté application sont applicables au mode Applis instantanées. Un autre exemple est un test qui valide les comportements derrière une autorisation qu'une appli instantanée ne peut pas détenir. Ce test n'est pas pertinent en mode Applis instantanées. Un ensemble de tests s'applique uniquement aux applis instantanées qui valident les règles concernant leur comportement, par exemple, ne pas exposer de services ou ne pas voir d'autres applications. En règle générale, ces tests sont déjà écrits et ne nécessitent pas de portage.

Échecs de test en mode Applis instantanées

Si le test échoue, car il valide une fonctionnalité à laquelle les applis instantanées ne peuvent pas accéder, il n'est pas applicable en mode Applis instantanées. Marquez le test pour qu'il ne s'exécute qu'en mode Application complète en l'annotant avec @AppModeFull. Vous pouvez appliquer cette annotation au niveau de la classe pour exclure tous les tests qu'elle contient.

Si le test échoue, car certaines fonctionnalités accessibles aux applis instantanées sont défectueuses, signalez un bug.

Dépannage

Si votre test échoue avec le message Failed to install MyCtsModule.apk on DEVICE. Reason: '-116' (Échec de l'installation de MyCtsModule.apk sur l'appareil. Raison : -116), recherchez les messages PackageManager dans Logcat. Par exemple, si le message Can't replace Full App with Instant App: your_app (Impossible de remplacer l'application complète par l'appli instantanée : votre_app) s'affiche, désinstallez d'abord votre application à l'aide d'adb.