CTS para Instant Apps

Os apps instantâneos são um recurso importante do Android 10. Por isso, é essencial que eles funcionem corretamente. Os apps instantâneos são instalados implicitamente, então eles 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 teste do CTS é criado para garantir que os comportamentos permitidos pelo Instant Apps estejam funcionando. A ideia principal é minimizar o crescimento do tamanho do CTS isolando o conjunto mínimo de testes para a porta. O CTS em execução no modo Instant Apps significa instalar o APK de teste como um Instant App e executar os testes.

Restrições de apps instantâneos

Os apps instantâneos não são instalados pelo usuário. Por isso, eles são executados em um sandbox restrito com as seguintes restrições:

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

Além disso, os apps instantâneos precisam ativar o novo sandbox de segurança para adicionar mais restrições. Essa ampla gama de comportamentos especiais em apps instantâneos atravessa toda a plataforma. Por isso, é necessário ter uma maneira de validar se os apps instantâneos funcionam como esperado em todos os dispositivos do ecossistema.

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

Nem todos os módulos do 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 precisarão ser executados no modo de apps instantâneos. Por exemplo, os testes OpenGL não interagem com o servidor do sistema e, portanto, não é necessário executá-los no modo de apps instantâneos, enquanto os testes de acessibilidade interagem com o servidor do sistema, mas precisam ser executados no modo de 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 de serviço para uma arquitetura com plug-ins (por exemplo, AccessibilityService) não é aplicável ao modo Instant App, porque os Instant Apps não podem expor serviços a outros apps (incluindo a plataforma), enquanto os testes que validam comportamentos do lado do app são aplicáveis ao modo Instant Apps. Outro exemplo é um teste que valida comportamentos por trás de uma permissão que um app instantâneo não pode manter, que não são relevantes no modo de app instantâneo. Há um conjunto de testes que se aplicam apenas a apps instantâneos que validam as regras sobre como eles se comportam, por exemplo, não expor serviços ou não ver outros apps. Normalmente, elas já estão escritas e não precisam de transferência.

Testar falhas no modo Apps instantâneos

Se o teste falhar porque valida uma funcionalidade que os apps instantâneos não podem acessar, ele não será aplicável no modo de apps instantâneos. Marque o teste para ser executado apenas no modo de app completo, anotando 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á corrompida, 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 a mensagem Can't replace Full App with Instant App: your_app aparecer, o adb desinstala o app primeiro.