Si bien la Biblioteca de microcomparativas envía un complemento de Gradle para integrarse directamente con el complemento de Gradle para Android, también puedes usar microcomparativas 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 de microcomparativas.
Instrumentación
Usa la clase AndroidBenchmarkRunner
o una subclase como panel de instrumentación especificándola en el bloque de instrumentación del manifiesto de prueba, como se muestra a continuación:
<manifest package="com.example.library.test" ...> <instrumentation android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner" /> ... </manifest>
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 microcomparativas 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.library
), el manifiesto de Android del APK único debe tener deshabilitada la depuración de la siguiente manera:
<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 app 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 microcomparativas 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 ejemplos de código, consulta el Proyecto de muestra de comparativas.
Cobertura de código
Las comparativas deben ejecutarse con la cobertura inhabilitada 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
Puedes ejecutar las pruebas desde la línea de comandos y especificar las clases con las que se ejecutarán.
adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner
Para configurar la biblioteca de microcomparativas en tiempo de ejecución sin Gradle, consulta Argumentos de instrumentación.
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Cómo escribir una microcomparativa
- Cómo crear perfiles de Baseline {:#creating-profile-rules}