Ainda que a biblioteca Benchmark forneça um plug-in do Gradle para ser integrado diretamente com o plug-in do Android para Gradle, você também pode usá-la em outros sistemas de compilação, como o Bazel ou Buck (links em inglês).
Este tópico descreve como configurar um sistema de compilação que não seja o Gradle ao usar a biblioteca Benchmark.
AndroidBenchmarkRunner
Use
AndroidBenchmarkRunner
ou uma subclasse como executor de instrumentação especificando-o no
bloco de instrumentação do manifesto de teste:
<instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" ... />
Depurável
Para ter medições precisas, os comparativos de mercado não podem ser
depuráveis. Se a
sinalização depurável não for definida corretamente, a biblioteca 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
.
Os comparativos de mercado podem ser criados para serem executados 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 o comparativo de mercado de um APK de módulo de app não é compatível com o Android Studio ou o 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 no seus comparativos de mercado para ter um desempenho mais próximo do lançamento. Para ver um código de exemplo, consulte o projeto de amostra de comparativo de mercado (em inglês).
Cobertura
Os comparativos de mercado precisam ser executados com a cobertura desativada, sem mangling de nenhuma biblioteca ou DEX por ferramentas como a Jacoco.
Por isso, recomendamos que os comparativos de mercado sejam um conjunto de origem completamente isolado de outros testes de instrumentação e criados separadamente com as dependências da versão. Também achamos que 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
Para configurar a biblioteca Benchmark no ambiente execução sem o Gradle, consulte Executar comparativos na integração contínua.