Participe do evento ⁠#Android11: apresentação de lançamento da versão Beta no dia 3 de junho.

Comparativos de compilação sem o Gradle

Enquanto a biblioteca de comparativos de mercado envia um plug-in Gradle para ser integrado diretamente ao plug-in do Android para Gradle, você também pode usar o comparativo de mercado em outros sistemas de compilação, como o Bazel ou Buck.

Este tópico descreve como configurar um sistema de compilação que não seja o Gradle ao usar a biblioteca de comparativos de mercado.

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 umAPK com autoinstrumentação simples (como saída de Gradle para um diretório androidTest de com.android.app), 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 APK de app e um APK de teste (conforme a saída de Gradle para um diretório androidTest de com.android.app), o APK do aplicativo 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 aplicativo.

Minificação e otimização

Recomendamos o uso do detalhamento e da otimização dos 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 (link 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 fontes 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.

Em uso

Para configurar a biblioteca de comparativos de mercado no momento da execução sem o Gradle, consulte Executar comparativos de mercado na integração contínua.