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 aumento do tamanho do CTS, isolando o conjunto mínimo de testes a serem transferidos. 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 ter apenas algumas permissões.
  • Não terá acesso a outros apps, a menos que eles estejam marcados como visíveis para Instant Apps.
  • 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 relacionadas a transmissões.

Além disso, os apps instantâneos precisam ativar o novo sandbox de segurança para adicionar mais restrições. Essa grande variedade de comportamentos especiais em torno dos Instant Apps abrange toda a plataforma. Portanto, é preciso haver uma maneira de validar se eles funcionam conforme o esperado em todos os dispositivos do 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 interagir com o servidor do sistema, esses testes precisarão ser executados no modo de apps instantâneos. Por exemplo, os testes OpenGL não estão interagindo com o servidor do sistema e, portanto, não é necessário executá-los no modo Instant Apps enquanto os testes de acessibilidade interagem com o servidor do sistema, mas é necessário executá-los 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. É possível aplicar essa anotação ao nível da classe para excluir todos os testes dele.

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, desinstale o app primeiro.