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.
Recommandations personnalisées
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé.
- Écrire un microbenchmark
- Créer des profils de référence {:#creating-profile-rules}