CTS para Instant Apps

Os apps instantâneos são um recurso fundamental do Android 10, então é 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 testes do CTS é criado para garantir que os comportamentos permitidos pelos Instant Apps estejam funcionando. A ideia principal é minimizar o crescimento do tamanho do CTS isolando o conjunto mínimo de testes a serem portados. O CTS executado no modo Instant Apps significa instalar o APK de teste como um Instant App e executar os testes.

Restrições dos 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 ter apenas algumas permissões.
  • Não é possível ver outros apps, a menos que eles estejam marcados como visíveis para apps instantâneos.
  • Acessar apenas algumas configurações do sistema.
  • Só pode acessar algumas 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 a permissão para que o novo sandbox de segurança adicione mais restrições. Essa ampla variedade de comportamentos especiais em torno dos apps instantâneos corta toda a plataforma. Por isso, é necessário 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 Instant Apps. Se a funcionalidade testada pelo módulo tiver interação com o servidor do sistema, esses testes deverão ser executados no modo Instant Apps. Por exemplo, os testes do OpenGL não interagem com o servidor do sistema. Portanto, não é necessário executá-los no modo Instant Apps. Já os testes de acessibilidade interagem com o servidor do sistema, sendo necessário executá-los no modo Instant Apps.

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ços para uma arquitetura conectável (por exemplo, AccessibilityService) não é aplicável ao modo de apps instantâneos, já que eles não podem expor serviços a outros apps (incluindo a plataforma), enquanto testes que validam comportamentos do lado do app são aplicáveis ao modo de 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 manter, que não são relevantes no modo de app instantâneo. Há um conjunto de testes que se aplicam apenas aos apps instantâneos e 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 portabilidade.

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 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á com problemas, registre um bug.

Solução de problemas

Se o teste falhar com a mensagem Failed to install MyCtsModule.apk on DEVICE. Motivo: "-116", procure mensagens do PackageManager no logcat. Por exemplo, se aparecer a mensagem Não é possível substituir o app completo pelo app instantâneo: seu_app, desinstale o app primeiro com o adb.