Únete a ⁠ #Android11: The Beta Launch Show el 3 de junio.

Cómo ejecutar comparativas en la integración continua

Es habitual ejecutar pruebas en IC sin Gradle, o de forma local si usas un sistema de compilación diferente. En este tema, se explica cómo configurar la biblioteca Benchmark durante el tiempo de ejecución sin Gradle.

Para obtener información sobre la manera en que son útiles las comparativas en IC y sobre cómo usar los datos de las comparativas para detectar regresiones, consulta Cómo detectar regresiones con comparativas en IC, en el Blog para desarrolladores de Android.

Resultados

Benchmark genera un archivo JSON con resultados y metadatos de una ejecución de prueba. Este archivo JSON se ubica en el almacenamiento externo del dispositivo. Debes extraer el archivo del dispositivo con cada ejecución.

La salida está inhabilitada de forma predeterminada, pero puedes habilitarla con el siguiente argumento de instrumentación, que debes pasar a tu comando am instrument:

    -e androidx.benchmark.output.enable true
    

De forma predeterminada, los informes se guardan en el dispositivo, dentro el directorio de descargas del almacenamiento externo de la app probada, que puedes encontrar con la siguiente consulta:

    adb shell content query --uri content://media/external/file --projection _data --where "\"_data LIKE '%Android'\""
    

Puedes configurar la ruta en la que Benchmark escribe utilizando el siguiente argumento de instrumentación:

    -e additionalTestOutputDir "device_path_you_can_write_to"
    

Almacenamiento y Android 10

Si, como en el complemento de Gradle para Android, es difícil extraer datos de salida del dispositivo antes de desinstalar una prueba, puedes pasar el argumento de instrumentación de más abajo. En los dispositivos que ejecutan Android 10 y versiones posteriores, este argumento permite conservar los archivos después de la desinstalación:

    -e no-isolated-storage 1
    

Si también vas a especificar la API 29 y versiones posteriores, debes permitir de manera explícita las opciones de almacenamiento heredado en el manifiesto de tus comparativas:

    <application android:requestLegacyExternalStorage="true" ... >
    

Consulta Cómo inhabilitar la vista filtrada para obtener más información sobre cómo inhabilitar el almacenamiento específico.

Cómo bloquear relojes

El complemento de Gradle para Benchmark proporciona el comando ./gradlew lockClocks, que se usa para bloquear los relojes de la CPU de un dispositivo con derechos de administrador. Esto es útil para garantizar la estabilidad cuando tienes acceso a dispositivos con derechos de administrador, como compilaciones "userdebug". Puedes replicar esta acción con la secuencia de comandos de shell lockClocks.sh, que está disponible en la fuente de la biblioteca.

Puedes ejecutar la secuencia de comandos directamente desde un host de Linux o Mac, o puedes enviarla al dispositivo con algunos comandos adb:

    adb push path/lockClocks.sh /data/local/tmp/lockClocks.sh
    adb shell /data/local/tmp/lockClocks.sh
    adb shell rm /data/local/tmp/lockClocks.sh
    

Si ejecutas la secuencia de comandos de shell directamente en un host, este envía estos comandos a un dispositivo conectado.

Argumentos de instrumentación

Puedes configurar el comportamiento de la biblioteca con los siguientes argumentos de instrumentación:

androidx.benchmark.startupMode.enable

  • Reconfigura el comportamiento de bucle para admitir el código de comparativas durante el inicio.
  • Inhabilita el bucle de preparación.
  • Captura 10 mediciones.
  • Inhabilita el promedio de bucles, lo que minimiza la sobrecarga en microcomparativas.
  • La configuración predeterminada es false.

androidx.benchmark.output.enable

  • Permite escribir el archivo JSON resultante en almacenamiento externo.
  • La configuración predeterminada es false.

androidx.benchmark.suppressErrors

  • Lista de errores separada por comas, como DEBUGGABLE,LOW-BATTERY, para convertir en advertencias.
  • La configuración predeterminada es una lista vacía.

additionalTestOutputDir

  • Establece en qué lugar del dispositivo se guardan los informes de comparativas de JSON completos.
  • La configuración predeterminada es el directorio de descargas externo del APK de prueba.