Embora a biblioteca Microbenchmark use um plug-in do Gradle para ser integrada diretamente ao Plug-in do Android para Gradle, você também pode usá-la em outros sistemas de compilação, como Bazel ou Buck (link em inglês).
Este tópico descreve como configurar um sistema de compilação que não seja o Gradle com a biblioteca Microbenchmark.
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 a
sinalização depurável não for definida corretamente, a biblioteca vai emitir um erro em vez de
informar resultados inválidos. Essa configuração pode precisar ser ativada 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 que instrumente outro APK.
APKs com autoinstrumentação
Com um APK com autoinstrumentação simples, como saída de Gradle para um
diretório androidTest
de com.android.library
, o manifesto do Android de
um único APK precisa estar com a opção depurável desativada:
<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
Caso sua versão gere dois APKs, um de app e um de teste (conforme a saída de Gradle para
um diretório androidTest
de com.android.app
), o APK do app precisa ser definido como
debuggable=false
. A sinalização depurável do APK de teste é ignorada pelo sistema operacional Android.
<!-- test manifest --> <manifest package="com.example.android.app.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" android:targetPackage="com.example.android.app"/> <!-- debuggable here ignored by OS! --> </manifest> <!-- app being tested --> <manifest package="com.example.android.app" ...> <application android:debuggable="false"/> </manifest>
Observe que a microcomparação de um APK de módulo de app não tem suporte do Android Studio ou Gradle. Isso se deve à complexidade de oferecer compatibilidade a outro diretório de teste que depende de uma variante não depurável, otimizada ou minificada do APK, mas sem a minificação das chamadas dos comparativos de mercado para o código do app.
Minificação e otimização
Recomendamos o uso de minificação e otimização das comparações para ter um desempenho mais próximo ao do lançamento. Para um exemplo de código, consulte o Projeto de exemplo de comparativo (em inglês).
Cobertura de código
As comparações precisam ser executadas com a cobertura desativada, sem mangling de nenhuma biblioteca ou DEX por ferramentas como a Jacoco.
Por isso, recomendamos que as comparações sejam um conjunto de origem completamente isolado de outros testes de instrumentação e criadas separadamente com as dependências da versão. Isso evita a necessidade de criar testes mais de uma vez: com e sem cobertura.
Também é importante observar que as variantes de depuração das bibliotecas de que seu comparativo de mercado depende, especialmente aquelas construídas localmente, podem ser criadas com a cobertura ativada.
Como executar
Você pode executar seus testes na linha de comando e especificar as classes com que serão executados.
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
Para configurar a biblioteca Microbenchmark no ambiente de execução sem o Gradle, consulte Argumentos de instrumentação.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Como criar uma comparação da Microbenchmark
- Criar perfis de referência {:#creating-profile-rules}