É comum executar testes em CI sem o Gradle ou localmente se você estiver usando um sistema de compilação diferente. Este tópico explica como configurar a biblioteca Benchmark no tempo de execução sem o Gradle.
Para saber por que os comparativos de mercado são úteis no CI e como usar os dados do comparativo para detectar regressões, consulte Como combater regressões com os comparativos de mercado em CI (em inglês) no Blog de desenvolvedores Android.
Resultados
O comparativo de mercado gera um arquivo JSON com resultados e metadados de uma execução de teste. Esse arquivo JSON é gravado no armazenamento externo do dispositivo. É necessário extrair o arquivo do dispositivo a cada execução.
A saída está desativada por padrão, mas é possível ativá-la com o seguinte
argumento de instrumentação, transmitido para
o comando am instrument
:
-e androidx.benchmark.output.enable true
Por padrão, os relatórios são salvos no dispositivo no diretório de downloads do armazenamento externo do app testado, que pode ser encontrado com a seguinte consulta:
adb shell content query --uri content://media/external/file --projection _data --where "\"_data LIKE '%Android'\""
É possível configurar o caminho das gravações de comparativo de mercado usando o seguinte argumento de instrumentação:
-e additionalTestOutputDir "device_path_you_can_write_to"
Armazenamento e Android 10
Se, como no Android Gradle, for difícil extrair dados de saída do dispositivo antes de um teste ser desinstalado, é possível transmitir o argumento de instrumentação a seguir. Em dispositivos com Android 10 e versões mais recentes, esse argumento permite que os arquivos continuem existindo após a desinstalação:
-e no-isolated-storage 1
Se você também estiver direcionando para a API 29 e versões mais recentes, também será necessário permitir explicitamente as opções de armazenamento de legado no manifesto do comparativo de mercado:
<application android:requestLegacyExternalStorage="true" ... >
Para mais informações, consulte Desativar temporariamente o armazenamento com escopo.
Bloquear clocks
O plug-in do Gradle de comparativo de mercado fornece o comando ./gradlew lockClocks
para bloquear
os clocks da CPU de um dispositivo com acesso root. Isso é útil para garantir que há estabilidade em
dispositivos com acesso root, como as versões "userdebug". É possível
replicar isso com o script de shell lockClocks.sh
, disponível na
origem da biblioteca.
É possível executar o script diretamente de um host Linux ou Mac ou enviar para o dispositivo com alguns comandos adb:
adb push path/lockClocks.sh /data/local/tmp/lockClocks.sh adb shell /data/local/tmp/lockClocks.sh adb shell rm /data/local/tmp/lockClocks.sh
Se você executar o script de shell diretamente em um host, ele enviará esses comandos para um dispositivo conectado.
Argumentos de instrumentação
Configure o comportamento da biblioteca usando os argumentos de instrumentação abaixo:
androidx.benchmark.startupMode.enable (experimental),
- Reconfigura o comportamento de repetição para oferecer suporte ao código de comparação durante a inicialização
- Desativa a repetição de aquecimento
- Captura 10 medidas
- Desativa a média de repetição, o que minimiza a sobrecarga em microcomparativos
- O valor padrão é
false
.
androidx.benchmark.output.enable
- Permite gravar o arquivo JSON de resultado no armazenamento externo
- O valor padrão é
true
.
androidx.benchmark.suppressErrors
- Lista de erros separados por vírgula, como
DEBUGGABLE,LOW-BATTERY
, para transformar em alertas - O padrão é uma lista vazia
androidx.benchmark.profiling.mode
- Um destes:
None
,MethodTracing
ouStackSampling
(não diferenciam maiúsculas de minúsculas) - O valor padrão é
None
. - Para mais informações, consulte Criação de perfil.
androidx.benchmark.profiling.sampleFrequency
- Número de amostras de pilha a serem capturadas por segundo no modo de criação de perfil
StackSampling
. - O padrão é de
1000
amostras por segundo. - Para mais informações, consulte Criação de perfil.
androidx.benchmark.profiling.sampleDurationSeconds
- Duração da comparação a ser executada no modo de criação de perfil
StackSampling
. - O padrão é de
5
segundos. - Para mais informações, consulte Criação de perfil.
additionalTestOutputDir
- Configura onde os relatórios de comparativo de mercado JSON e os resultados de criação de perfil são salvos no dispositivo.
- O padrão é testar o diretório de download externo do APK