Módulo auxiliar de interação com dispositivos CTS

No Android 11 ou versões mais recentes, os módulos auxiliares de interação com o dispositivo do conjunto de teste de compatibilidade (CTS) permitem personalizar como determinados testes do CTS interagem com a interface do usuário (UI) em um dispositivo específico. Isso significa que ações, como substituir um elemento da interface que não está coberto pelo Documento de definição de compatibilidade do Android (CDD) ou documentos da API, podem ser realizadas enquanto ainda são aprovados no CTS.

OEMs que querem personalizar a interface do Android durante o desenvolvimento do produto e precisam ser aprovados pelo CTS podem implementar módulos auxiliares. Se você usar a implementação padrão do Android, não será necessário fazer mais nada.

Implementar módulos auxiliares

Requisitos para personalizar a interface

Verifique os módulos CDD ou Mainline para saber se há requisitos de interface. Se a interface desejada for coberta pelos módulos CDD ou Mainline, ela não poderá ser personalizada.

Se os testes do CTS que interagem com a interface desejada não usarem o framework auxiliar, essa interface não poderá ser personalizada. Trabalhe com o proprietário do teste para converter o módulo de teste antes que a interface possa ser alterada.

Caso contrário, você pode personalizar a interface.

Fluxo de trabalho de implementação

  1. Personalize a interface conforme necessário para seu produto específico.
  2. Designe os módulos auxiliares do AOSP atuais como subclasses para os módulos de teste do CTS que precisam interagir com a interface. Substitua as interações necessárias de forma adequada para a interface personalizada. As substituições variam de acordo com o tipo de mudança.
    • As subclasses do OEM estão em um pacote OEM, como com.[oem].cts.helpers.
    • Cada subclasse OEM é nomeada com um prefixo comum que a diferencia da implementação do AOSP, que tem o prefixo Default.
  3. Crie os auxiliares em um APK seguindo essas convenções do executor de testes.
    • Android.bp precisa declarar android_test_helper_app com o mesmo nome do pacote contido.
    • A AndroidManifest.xml do APK precisa declarar uma propriedade de metadados chamada interaction-helpers-prefix com o valor do prefixo de classe escolhido no marcador anterior.
    • O app precisa depender de cts-helpers-core, cts-helpers-interfaces e com.android.cts.helpers.aosp. Se os auxiliares do OEM implementarem totalmente todas as interfaces relevantes, com.android.cts.helpers.aosp será opcional.
  4. Defina a propriedade ro.vendor.cts_interaction_helper_packages na imagem do dispositivo para incluir o nome do APK. Se você precisar separar as implementações auxiliares em vários APKs, essa propriedade poderá conter uma lista de pacotes separados por dois-pontos.
  5. Verifique se o APK está disponível no diretório testcases ao executar o Tradefed para CTS. Se necessário, confirme se a classe de implementação de ajudante esperada foi escolhida examinando as mensagens do Logcat.
  6. Opcional, mas altamente recomendado: envie sua implementação de ajudante para o AOSP ou disponibilize-a para testes de terceiros.

Exemplo de implementação auxiliar

Por exemplo, CtsPrintTestCases espera um auxiliar com a interface definida em ICtsPrintHelper. A implementação do AOSP é chamada de com.android.cts.helpers.aosp.DefaultCtsPrintHelper.

Se você personalizar a interface de impressão, poderá criar uma com.oem.cts.helpers.OemCtsPrintHelper que é uma subclasse de DefaultCtsPrintHelper. android_test_helper_app em Android.bp é chamado de com.oem.cts.helpers, que produz com.oem.cts.helpers.apk e declara interaction-helpers-prefix como Oem em AndroidManifest.xml.

A propriedade do dispositivo ro.vendor.cts_interaction_helper_packages está definida como com.oem.cts.helpers.

Implementações de referência

As implementações de referência incluem interfaces em cts/libs/helpers e os ajudantes padrão do AOSP em cts/helpers. A interface de nível superior está documentada em cts/libs/helpers/core/src/com/android/cts/helpers/ICtsDeviceInteractionHelper.java.

Para conectar o teste CTS aos auxiliares, os proprietários de testes podem usar a definição @Rule documentada em cts/libs/helpers/core/src/com/android/cts/helpers/DeviceInteractionHelperRule.java.

Cada módulo do CTS que usa o framework e o comportamento auxiliar esperado é documentado em uma interface definida em cts/libs/helpers/core/src/com/android/cts/helpers.

Como executar testes do CTS

Testar sem ajudantes

Além de uma propriedade, a opção de testar sem auxiliares não existe no tempo de execução no dispositivo, mas modifica opcionalmente como os testes de CTS interagem com o dispositivo. Se você precisar executar o CTS sem as implementações auxiliares, terá duas opções:

  • Remova a propriedade ro.vendor.cts_interaction_helper_packages do dispositivo. Isso impede que os helpers sejam usados totalmente nesse build.
  • Remova o APK auxiliar do diretório testcases antes de executar o CTS. Isso impede que os helpers sejam usados por qualquer execução até que o APK seja restaurado para testcases.

É possível alterar as configurações padrão com argumentos Tradefed e o controle de propriedade ro.vendor.cts_interaction_helper_packages, que é de onde o APK auxiliar é carregado.

Confira a seguir os valores ou intervalos esperados para cada uma das configurações disponíveis.

  • ro.vendor.cts_interaction_helper_packages é uma string separada por dois-pontos que contém nomes de pacotes. Ele pode receber qualquer valor que seja uma escolha de pacote válida para a implementação auxiliar do OEM.
  • cts-tradefed aceita um argumento device-interaction-helper:property-name que muda temporariamente a propriedade esperada para uma execução de teste, como --module-arg 'CtsPrintTestCases:{device-interaction-helper}property-name:debug.cts.hlp'. O valor do nome da propriedade pode ser qualquer propriedade definida no dispositivo. O valor da propriedade segue as mesmas restrições da propriedade ro.vendor.cts_interaction_helper_packages descrita acima.

Como testar com personalizações

Por padrão, as implementações de referência passam no CTS no Android padrão. Verifique se as implementações do parceiro passam no CTS com personalizações da interface. Execute os módulos do CTS que abrangem a interface ou os recursos que você personalizou.

Alguns módulos ou auxiliares do CTS ainda não oferecem suporte a algumas personalizações.

  • Um módulo do CTS que interage com a interface que você quer personalizar pode não usar o framework auxiliar. Espera-se que os módulos do CTS sejam convertidos no framework auxiliar com base na demanda e nas prioridades do proprietário do teste. Faça pedidos de conversão no início do processo para garantir que a conversão seja programada, semelhante a solicitar mudanças de CTS para oferecer suporte aos recursos planejados.
  • As funções fornecidas por um assistente atual podem não atender totalmente às personalizações que você quer fazer. As funções auxiliares precisam abstrair as dependências da interface. Se uma função auxiliar tiver uma dependência de interface indireta, ela poderá ser tratada de forma semelhante a bugs no CTS.