Créer des microanalyses comparatives sans Gradle

Cette page décrit la configuration d'un système de compilation autre que Gradle lorsque vous utilisez la bibliothèque Microbenchmark.

Bien que la bibliothèque Microbenchmark inclut un plug-in Gradle pour une intégration directe au plug-in Android Gradle, vous pouvez également l'utiliser dans d'autres systèmes de compilation, tels que Bazel ou Buck.

Instrumentation

Utilisez AndroidBenchmarkRunner ou une sous-classe comme utilitaire de test d'instrumentation en le spécifiant dans le bloc d'instrumentation du fichier manifeste de test :

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

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

Pour obtenir des mesures précises, les analyses comparatives ne doivent pas être débogables. Si vous ne définissez pas correctement l'indicateur de débogage, la bibliothèque génère une erreur au lieu de signaler les résultats non valides. Vous devrez peut-être activer/désactiver ce paramètre lors des exécutions locales pour l'utiliser avec les profileurs Android Studio, qui nécessitent debuggable=true.

Vous pouvez créer des microanalyses comparatives à exécuter de deux manières différentes : dans un APK d'auto-instrumentation ou avec un APK instrumenté par un APK de test.

APK d'auto-instrumentation

Avec un APK d'auto-instrumentation (tel que généré par Gradle pour un répertoire androidTest à partir de com.android.library), vous devez désactiver l'élément débogable dans le fichier manifeste Android de l'APK unique :

<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 d'application instrumenté par un APK de test

Si votre build génère deux APK (un APK d'application et un APK de test, comme généré par Gradle pour le répertoire androidTest du package com.android.app), vous devez définir l'APK d'application sur debuggable=false. L'indicateur de débogage de l'APK de test est ignoré par l'OS Android.

<!-- Test manifest. -->
<manifest
    package="com.example.android.app.test" ...>

    <instrumentation
        android:name="androidx.benchmark.junit4.AndroidBenchmarkRunner"
        android:targetPackage="com.example.android.app"/>
    <!-- This debuggable is ignored by the OS. -->
</manifest>

<!-- App being tested. -->
<manifest
    package="com.example.android.app" ...>

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

Android Studio et Gradle ne sont pas compatibles avec la microanalyse comparative d'un APK de module d'application. Cela est dû à la complexité de la prise en charge d'un répertoire de test supplémentaire qui dépend d'une variante non débogable, optimisée ou minimisée de l'APK, sans que la minimisation ne bloque les appels des analyses comparatives au code de l'application.

Compilation

Nous vous recommandons de compiler votre APK de microbenchmark avant d'exécuter les tests à l'aide de la classe la commande suivante:

adb shell cmd package compile -f -m speed com.example.benchmark

Minimisation et optimisation

Nous vous recommandons d'utiliser la minimisation et l'optimisation pour vos analyses comparatives afin d'obtenir des performances proches de celles de la version définitive. Pour obtenir un exemple de code, consultez l'exemple de projet d'analyse comparative.

Couverture de code

Nous vous recommandons d'exécuter des analyses comparatives avec la couverture désactivée et sans gestion de bibliothèque ou DEX par des outils tels que JaCoCo.

Pour cette raison, nous vous recommandons d'isoler les analyses comparatives en tant qu'ensemble de sources des autres tests d'instrumentation et de les créer séparément avec des dépendances de version. Cela évite d'avoir à créer des tests plusieurs fois, avec et sans couverture.

Les variantes de débogage des bibliothèques dont dépend votre analyse comparative, en particulier celles compilées localement, peuvent être créées avec la couverture activée.

Exécuter vos tests

Vous pouvez exécuter vos tests à partir de la ligne de commande et spécifier les classes à exécuter, comme illustré dans l'exemple suivant :

adb shell am instrument -w com.example.benchmark/androidx.benchmark.junit4.AndroidBenchmarkRunner

Pour configurer la bibliothèque Microbenchmark au moment de l'exécution sans Gradle, consultez la page Arguments d'instrumentation de Microbenchmark.