Créer des microanalyses comparatives sans Gradle

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

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.

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

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 l'indicateur débogable n'est pas correctement défini, la bibliothèque génère une erreur au lieu de signaler les résultats non valides. Notez que vous devrez peut-être activer ce paramètre lors des exécutions locales pour l'utiliser avec les profileurs Android Studio, qui nécessitent debuggable=true.

Les microanalyses comparatives peuvent être créées pour s'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 simple (tel que généré par Gradle pour le répertoire androidTest d'une bibliothèque com.android.library), l'option de débogage du fichier manifeste Android de l'APK unique doit être désactivée :

<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, à savoir un APK d'application et un APK de test (tel que généré par Gradle pour le répertoire androidTest d'une application com.android.app), l'APK d'application doit être défini 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"/>
    <!-- debuggable here ignored by OS! -->
</manifest>

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

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

Notez que la microanalyse comparative de l'APK d'un module d'application n'est pas compatible ni avec Android Studio ni avec Gradle. 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.

Minimisation et optimisation

Nous vous recommandons d'utiliser la minimisation et l'optimisation pour vos analyses comparatives afin d'obtenir des performances plus 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

Vous devez exécuter les analyses comparatives sans couverture et sans gestion de bibliothèque ou de DEX effectuée par des outils tels que JaCoCo.

Pour cette raison, nous vous recommandons d'utiliser des analyses comparatives comme ensemble de sources entièrement isolé des autres tests d'instrumentation et créées séparément avec des dépendances de version. Cela évite également d'avoir à créer des tests plusieurs fois, avec et sans couverture.

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

Exécution

Vous pouvez exécuter vos tests à partir de la ligne de commande et spécifier les classes à exécuter.

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.