Lorsque vous utilisez Firebase Performance dans Android Studio, la tâche de gradation app:transformClassesWithFirebasePerformancePluginForDebug
prend beaucoup plus de temps que toute autre tâche et ralentit donc considérablement le temps de création de mon dégradé.
Dans notre projet, Firebase a entraîné une augmentation de 40% du temps de construction. Pour accélérer les générations de débogage, nous avons ajouté la possibilité de l'activer/désactiver à l'aide de paramètres de construction dans les fichiers app/build.gradle et root build.gradle:
app:
if (! project.hasProperty ("disable-performance-plugin")) { appliquer le plugin: 'com.google.firebase.firebase-perf'}
root/buildscript/dependencies:
if (! project.hasProperty ("disable-performance-plugin")) { classpath ('com.google.firebase: firebase-plugins: 1.1.5') { groupe d'exclusion: 'com.google.guava', module: 'guava-jdk5' } }
lors de l'exécution à partir de la ligne de commande, utilisez
./gradlew your-task -Pdisable-performance-plugin
lorsque vous travaillez à partir d'Android Studio, ajoutez l'indicateur aux options du compilateur:
Toutes les réponses existantes sont valables, mais elles manquent toutes quelque chose.
Pour résoudre ce problème, vous avez le choix entre 2 options principales.
firebasePerformanceInstrumentationEnabled
Ceci est le moyen officiel fourni par le SDK lui-même pour le désactiver pendant le processus de construction.
Qu'est-ce que ça fait:
transformClassesWithFirebasePerformancePluginFor*
à ~ 5-10s.<meta-data>
et les appels à FirebasePerformance.getInstance().setPerformanceCollectionEnabled()
. Plus d'infos dans les docs .Avantages:
Les inconvénients:
Comment faire ceci: _
Je pense que c'est beaucoup plus facile de seulement activer plugin dans ces rares cas quand nous en avons besoin (habituellement ce sera seulement lorsque nous publierons l'application), plutôt que de la désactiver dans tous les autres cas .
Remarque: Bien entendu, avec les versions manuelles, vous pourriez oublier pour l'activer. Donc, si vous n'avez pas de CI, cela vaut peut-être la peine d'ajouter d'autres scripts automatiques dans Gradle ou de vous en tenir à l'approche inverse utilisée dans d'autres réponses.
En général cependant, nous n’avons besoin que de deux étapes:
Ajoutez la ligne suivante au fichier gradle.properties
:
firebasePerformanceInstrumentationEnabled=false
Utilisez la commande suivante dans votre construction de configuration ou de configuration manuelle:
./gradlew assembleRelease -PfirebasePerformanceInstrumentationEnabled = true
firebase-perf
GradleQu'est-ce que ça fait:
transformClassesWithFirebasePerformancePluginFor*
ainsi que les frais généraux supplémentaires de ~ 5 à 10s présents lors de l'utilisation de la première solution.<meta-data>
et les appels à FirebasePerformance.getInstance().setPerformanceCollectionEnabled()
. Plus d'infos dans les docs .Avantages:
Les inconvénients:
Comment faire ceci: _
Cette approche comporte des points et des avertissements similaires et comprend également deux étapes:
Modifiez le fichier build.gradle
de votre module d'application:
if (project.hasProperty('useFirebasePerf')) {
apply plugin: 'com.google.firebase.firebase-perf'
}
Remarque: vous inutile d'appliquer le même contrôle à votre build.gradle
au niveau du projet:
classpath "com.google.firebase:firebase-plugins:$firebase_plugins_version"
Gradle n'utilisera en aucune manière cette déclaration lorsque le plugin lui-même n'est pas activé.
Et vous n'avez pas besoin pour exclure la dépendance guava-jdk5
, si vous utilisez firebase-plugins v1.1.1 ou une version ultérieure comme comme indiqué dans la documentation .
Utilisez la commande suivante dans votre construction de configuration ou de configuration manuelle:
./gradlew assembleRelease -PuseFirebasePerf
firebase-perf
SDK.Si vous n'utilisez pas de traces personnalisées ni d'autres fonctionnalités du SDK Firebase Performance et ne vous fiez qu'à la surveillance automatique (en d'autres termes, vous ne dépendez pas du SDK dans votre code), vous pouvez alors exclure cette dépendance pour des tâches autres que de production. construit.
Avantage:
Désavantages:
Comment faire ceci: _
Il vous suffit de mettre à jour le fichier build.gradle
de votre module d'application:
Si vous avez choisi d'utiliser la première option, changez votre dépendance de la manière suivante:
if (project.property('firebasePerformanceInstrumentationEnabled') == 'true') {
implementation "com.google.firebase:firebase-perf:${firebase_perf_version}"
}
Si vous avez choisi le second:
if (project.hasProperty('useFirebasePerf')) {
implementation "com.google.firebase:firebase-perf:${firebase_perf_version}"
}
Juste pour donner une autre option pour désactiver transformClassesWithFirebasePerformancePluginForDebug
, voici ma recette:
Dans le dossier principal build.gradle:
if (!project.gradle.startParameter.taskNames.any { taskName ->
taskName.toLowerCase().contains('assemble') && taskName.toLowerCase().contains('debug') }) {
classpath("com.google.firebase:firebase-plugins:$firebasePluginVersion") {
exclude group: 'com.google.guava', module: 'guava-jdk5'
}
}
Dans le fichier d'application build.gradle:
if (!project.gradle.startParameter.taskNames.any { taskName ->
taskName.toLowerCase().contains('assemble') && taskName.toLowerCase().contains('debug') }) {
apply plugin: 'com.google.firebase.firebase-perf'
}
Tous les commentaires dans ce fil sont valides. Je veux suggérer un moyen très simple de désactiver cela pour les versions de débogage:
if (getGradle().getStartParameter().getTaskRequests().toString().contains("Release")) {
apply plugin: 'com.google.firebase.firebase-perf'
}
J'ai rencontré ce problème aussi. À l'origine, nous utilisions une variante de la réponse fournie par R. Zagórski, mais si l'on se base sur un fil similaire des forums Gradle, il semble que l'application conditionnelle d'un plugin à un projet n'est pas la bonne solution:
Les plugins ne peuvent pas être appliqués à seulement "une partie de votre projet". Ils sont appliqués ou non.
L'application conditionnelle de plugins semble fonctionner si vous pouvez le faire correctement, mais ce n'est pas une fonctionnalité officiellement prise en charge. Plus loin dans le même fil, un autre point est fait:
Mais le plugin devrait vous permettre de le configurer à un niveau de grain plus fin.
Effectivement, il existe une propriété exposée par le plug-in Firebase qui vous permet d'activer ou de désactiver l'instrumentation (par conséquent, de basculer le temps de construction accru). L'utilisation de cette propriété est toutefois délicate, car vous devez l'appliquer exactement au bon moment pendant le processus de construction, mais une fois que vous l'avez obtenue, vous pouvez essentiellement la faire pivoter sur ce que vous voulez.
L'extrait de code suivant montre comment nous faisons pivoter l'instrumentation en fonction des variantes de construction Debug et non-Debug. C'est écrit en Kotlin, mais j'imagine que cela se traduirait aussi bien en Groovy:
plugins {
...
id ("com.google.firebase.firebase-perf")
}
...
Android {
...
applicationVariants.all {
val variant = this
val isFirebaseEnabled = !variant.javaCompiler.name.contains("Debug", true)
gradle.taskGraph.whenReady {
if (this.hasTask(variant.javaCompiler))
{
project.FirebasePerformance.isInstrumentationEnabled = isFirebaseEnabled
}
}
}
...
}
Notez que si cette tâche est en place, la tâche transformClassesWithFirebasePerformancePluginFor*
sera toujours exécutée pour chaque variante de construction, mais elle s’achèvera presque immédiatement pour une variante pour laquelle l’instrumentation n’est pas activée.
Je trouve qu'Android Studio commence à mettre beaucoup de temps à gagner du temps pour fermer Android Studio et organiser certains événements sur mon ordinateur, puis redémarrer. C'est mieux alors - avez-vous essayé de redémarrer?