CTS para Instant Apps

Os Apps instantâneos são um recurso essencial do Android 10, então é fundamental que eles funcionem corretamente. Os Apps instantâneos são instalados implicitamente, então têm um conjunto restrito de recursos e são executados em um sandbox de segurança mais restritivo. Devido à natureza abrangente dessas restrições, qualquer parte do sistema corre o risco de não funcionar corretamente com os Apps instantâneos. Um subconjunto de testes CTS é criado para garantir que os comportamentos permitidos pelos Apps instantâneos estejam funcionando. A ideia principal é minimizar o crescimento do tamanho do CTS isolando o conjunto mínimo de testes a serem transferidos. O CTS em execução no modo Apps instantâneos significa instalar o APK de teste como um App instantâneo e executar os testes.

Restrições dos Apps instantâneos

Os Apps instantâneos não são instalados pelo usuário, então são executados em um sandbox restrito com as seguintes restrições:

  • Só podem ter determinadas permissões.
  • Não podem ver outros apps, a menos que eles estejam marcados como visíveis para os Apps instantâneos.
  • Só podem acessar determinadas configurações do sistema.
  • Só podem acessar determinadas propriedades do sistema.
  • Não podem expor serviços/provedores.
  • Podem receber e enviar com regras especiais sobre transmissões.

Além disso, os Apps instantâneos precisam ativar a permissão para que o novo sandbox de segurança adicione mais restrições. Essa ampla variedade de comportamentos especiais em relação aos Apps instantâneos abrange toda a plataforma. Portanto, é necessário validar se os Apps instantâneos funcionam conforme o esperado para todos os dispositivos no ecossistema.

Testes em execução no modo Apps instantâneos

Nem todos os módulos CTS têm testes aplicáveis aos Apps instantâneos. Se a funcionalidade testada pelo módulo tiver interação com o servidor do sistema, esses testes deverão ser executados no modo Apps instantâneos. Por exemplo, os testes OpenGL não interagem com o servidor do sistema, então não é necessário executá-los no modo Apps instantâneos. Já os testes de acessibilidade interagem com o servidor do sistema, então é necessário executá-los no modo Apps instantâneos.

Além de identificar quais módulos são aplicáveis, os usuários precisam determinar quais testes nesses módulos são relevantes. Por exemplo, testar comportamentos específicos do serviço para uma arquitetura conectável (por exemplo, AccessibilityService) não é aplicável ao modo Apps instantâneos, já que os Apps instantâneos não podem expor serviços a outros apps (incluindo a plataforma). Os testes que validam comportamentos do lado do app são aplicáveis ao modo Apps instantâneos. Outro exemplo é um teste que valida comportamentos por trás de uma permissão que um App instantâneo não pode ter, que não é relevante no modo Apps instantâneos. Há um conjunto de testes que se aplicam apenas aos Apps instantâneos que validam as regras sobre como eles se comportam, por exemplo, não expondo serviços ou não vendo outros apps. Normalmente, eles já estão escritos e não exigem transferência.

Falhas de teste no modo Apps instantâneos

Se o teste falhar porque valida funcionalidades que os Apps instantâneos não podem acessar, ele não será aplicável no modo Apps instantâneos. Marque o teste para ser executado apenas no modo de app completo anotando-o com @AppModeFull. Você pode aplicar essa anotação no nível da classe para excluir todos os testes nela.

Se o teste falhar porque alguma funcionalidade acessível aos Apps instantâneos está quebrada, registre um bug.

Solução de problemas

Se o teste falhar com Falha ao instalar MyCtsModule.apk no DISPOSITIVO. Motivo: "-116", procure mensagens do PackageManager no Logcat. Por exemplo, se ele disser Não é possível substituir o app completo pelo App instantâneo: your_app, desinstale o app primeiro.