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.