Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Cómo crear comparativas sin Gradle

Si bien la biblioteca Benchmark envía un complemento de Gradle para integrarse directamente con el complemento de Gradle para Android, también puedes usar Benchmark en otros sistemas de compilación, como Bazel o Buck.

En este tema, se describe la configuración de un sistema de compilación que no es de Gradle cuando se usa la biblioteca Benchmark.

AndroidBenchmarkRunner

Usa la clase AndroidBenchmarkRunner o una subclase como panel de instrumentación especificándola en el bloque de instrumentación del manifiesto de prueba:

    <instrumentation
        android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
        ... />
    

Depurable

Para obtener mediciones precisas, las comparativas no deben ser depurables. Si la marca de depuración no está configurada correctamente, la biblioteca muestra un error, en lugar de informar resultados no válidos. Ten en cuenta que es posible que esta configuración deba activarse durante las ejecuciones locales para su uso con generadores de perfiles de Android Studio, que requieren debuggable=true.

Se pueden compilar comparativas para que se ejecuten de dos maneras: dentro de un APK de instrumentación autónoma o con un APK de prueba que instrumente otro APK.

APK de instrumentación autónoma

Con un simple APK de instrumentación autónoma (como salida de Gradle para un directorio androidTest de com.android.app), el manifiesto de Android del APK único debe tener deshabilitada la depuración:

    <manifest
        package="com.example.library.test" ...>

        <instrumentation
            android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
            android:targetPackage="com.example.library.test"/>

        <application android:debuggable="false"/>
    </manifest>
    

El APK de la app instrumentado por un APK de prueba

Si tu compilación genera dos APK, un APK de aplicación y un APK de prueba (como salida de Gradle para un directorio androidTest de com.android.app), se debe configurar el APK de la app como debuggable=false. El SO Android ignora la marca de depuración del APK de prueba.

    <!-- 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>
    

Ten en cuenta que ni Android Studio ni Gradle admiten las comparativas de un APK de un módulo de app. Esto se debe a la complejidad de brindar compatibilidad con un directorio de prueba adicional que depende de una variante no depurable, optimizada o reducida del APK, pero sin la reducción que rompe las llamadas de las comparativas en código de apps.

Reducción y optimización

Recomendamos reducir y optimizar las comparativas para obtener un rendimiento más cercano al de la versión original. Para obtener un código de ejemplo, consulta el Proyecto de muestra de comparativas.

Cobertura

Las comparativas deben ejecutarse con la cobertura deshabilitada y no se deben realizar modificaciones en ninguna biblioteca o DEX con herramientas como Jacoco.

Por esta razón, recomendamos que las comparativas sean un conjunto de fuentes completamente aislado de otras pruebas de instrumentación, y que se compilen por separado con dependencias de lanzamientos. Además, consideramos que esto evita tener que realizar pruebas más de una vez, con y sin cobertura.

Ten en cuenta, también, que las variantes de depuración de las bibliotecas de las que depende tu comparativa, especialmente las compiladas de forma local, se pueden compilar con la cobertura habilitada.

Ejecución

Para configurar la biblioteca Benchmark durante el tiempo de ejecución sin Gradle, consulta Cómo ejecutar comparativas en la Integración continua.