Esta página descreve como configurar um sistema de build que não seja do Gradle usando a biblioteca Microbenchmark.
Embora a biblioteca Microbenchmark envie um plug-in do Gradle para ser integrado diretamente ao Plug-in do Android para Gradle, também é possível usá-la em outros sistemas de build, como o Bazel ou o Buck.
Instrumentação
Use AndroidBenchmarkRunner
ou uma subclasse como executor de instrumentação
especificando-o no bloco de instrumentação do manifesto de teste:
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" /> ... </manifest>
Para ter medições precisas, as comparações não podem ser depuráveis. Se você
não definir a flag depurável corretamente, a biblioteca vai gerar um erro em vez
de informar resultados inválidos. Talvez seja necessário ativar essa configuração durante
execuções locais para uso com os criadores de perfil do Android Studio, que exigem
debuggable=true
.
As microcomparações podem ser criadas para execução de duas maneiras: em um APK com autoinstrumentação ou com um APK de teste para instrumentar outro APK.
APKs com autoinstrumentação
Em um APK com autoinstrumentação, como saída do Gradle para um diretório androidTest
de com.android.library
, é necessário desativar a flag depurável no manifesto
Android único do arquivo:
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" android:targetPackage="com.example.library.test"/> <application android:debuggable="false"/> </manifest>
APK de app instrumentado por APK de teste
Se o build gerar dois APKs, ou seja, um APK do app e outro de teste, como saída do Gradle para
o diretório androidTest
do pacote com.android.app
, defina o APK do app como
debuggable=false
. A sinalização depurável do APK de teste é ignorada pelo SO Android.
<!-- Test manifest. --> <manifest package="com.example.android.app.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" android:targetPackage="com.example.android.app"/> <!-- This debuggable is ignored by the OS. --> </manifest> <!-- App being tested. --> <manifest package="com.example.android.app" ...> <application android:debuggable="false"/> </manifest>
O Android Studio e o Gradle não oferecem suporte à microcomparação de APKs de módulo de app. Isso se deve à complexidade de oferecer suporte a outro diretório de teste que dependa de uma variante não depurável, otimizada ou minificada do APK, mas sem a minificação das chamadas dos comparativos para o código do app.
Compilação
Recomendamos compilar seu APK de microcomparação antes de executar testes usando a seguinte comando:
adb shell cmd package compile -f -m speed com.example.benchmark
Minificação e otimização
Recomendamos o uso de minificação e otimização nas comparações para ter uma performance parecida com a de lançamento. Para conferir um exemplo de código, consulte o Projeto de exemplo de comparativo (link em inglês).
Cobertura de código
Recomendamos executar comparações com a cobertura desativada e sem mangling de nenhuma biblioteca ou DEX por ferramentas como a JaCoCo.
Por esse motivo, recomendamos isolar as comparações como um conjunto de origem de outros testes de instrumentação e criá-las separadamente com as dependências da versão. Isso evita a necessidade de criar testes mais de uma vez, com e sem cobertura.
As variantes de depuração das bibliotecas de que seu comparativo depende, principalmente as criadas localmente, podem ser criadas com a cobertura ativada.
Executar seus testes
Você pode executar os testes na linha de comando e especificar as classes de execução, conforme mostrado neste exemplo:
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
Para configurar a biblioteca Microbenchmark durante a execução sem o Gradle, consulte Argumentos de instrumentação da Microbenchmark.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado
- Criar uma comparação da Microbenchmark
- Criar perfis de referência {:#creating-profile-rules}