web-dev-qa-db-fra.com

Exécuter des peluches lors de la construction Android projets studio

J'aimerais pouvoir exécuter la tâche lint lorsque je crée des projets avec Android studio pour m'assurer que les règles lint sont respectées.

J'ai essayé d'utiliser des dépendances de tâches mais sans succès. Mon serveur de build teamcity utilise la tâche de build qui exécute la tâche lint, donc cela fonctionne très bien. Cependant, Android studio semble utiliser les tâches generateDebugSources et compileDebugJava de manière interchangeable lorsque j'ai sélectionné la variante de construction de débogage.

Voici ce que j'ai essayé dans mon build.gradle:

assemble.dependsOn lint
35
Robert

Si vous souhaitez simplement configurer votre Android Studio pour exécuter la vérification des peluches avant la configuration d'exécution par défaut sans affecter la configuration de vos tâches Gradle, vous pouvez suivre ces étapes.

  1. Ouvrez la liste déroulante des configurations d'exécution et choisissez Modifier

enter image description here

  1. Sélectionnez la configuration d'exécution de votre application

enter image description here

  1. Appuyez sur le "+" pour ajouter une nouvelle étape

enter image description here

  1. Choisissez "Marque compatible Gradle"

enter image description here

  1. Tapez "vérifier" et choisissez l'option avec le nom de votre module d'application et cochez. (Le mien est :app:check)

enter image description here

  1. Appuyez sur la flèche vers le haut pour déplacer la nouvelle étape check avant l'existant Gradle-aware make étape

enter image description here

Maintenant, Android Studio exécutera la vérification des peluches et échouera la construction si des erreurs de peluches se produisent.

33
Ross Hambrick

Pour exécuter des peluches et analyser votre projet, sélectionnez simplement Analyze > Inspect Code.

Vous devriez avoir une belle fenêtre avec tous les problèmes.

enter image description here

Vérifiez également Run lint in Android Studio pour plus d'informations.


J'ai fait un peu plus de recherche, essayez d'ajouter ceci à votre build.gradle.

lintOptions {
      abortOnError true
  } 

Il existe de nombreuses options que vous pouvez appliquer au build.gradle

31
AndyGable

Pour ce faire, dans build.gradle, ajoutez les lignes suivantes à votre build.gradle:

Android {
  applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def lintTask = tasks["lint${variant.name.capitalize()}"]
        output.assemble.dependsOn lintTask
    }
  }
  ...
}

Cela fait que toutes vos tâches d'assemblage dépendent de la tâche lint qui les exécute efficacement avant chaque appel d'assemblage exécuté par Android Studio.

Modifier

Avec Android Gradle Plugin 3.3 et Gradle 5.x, il s'agit d'une version révisée utilisant le script Kotlin:

applicationVariants.all {
  val lintTask = tasks["lint${name.capitalize()}"]
  assembleProvider.get().dependsOn.add(lintTask)
}
14
Yoel Gluschnaider

il suffit d'exécuter la tâche "vérifier"

./gradlew clean check assembleRelease

7
stephane k.

Si vous souhaitez forcer Android projet Studio pour exécuter le test de peluches avant la configuration d'exécution par défaut sans affecter la façon dont vos tâches Gradle sont configurées, ET vous voulez le faire dans le système de construction Gradle, alors vous peut ajouter le bloc suivant en dehors du bloc Android dans build.gradle du module d'application comme suit:

Android {
....
    lintOptions {
        abortOnError true
    }
}

tasks.whenTaskAdded { task ->
    if (task.name == 'compileDevDebugSources') {
        task.dependsOn lint
        task.mustRunAfter lint
    }
}

Remplacez compileDevDebugSources par la variante de construction souhaitée que vous avez déjà définie, par exemple. compileReleaseSources, compileDebugSources, compileStagingDebugSources, etc.

Cela a été testé en travaillant sur Android Studio 3.0

4
Phileo99

voici ma solution qui fonctionne également lorsque vous cliquez sur Build - Make Project in Android Studio:

Android {
..
    afterEvaluate {
        applicationVariants.all {
            variant ->
                // variantName: e.g. Debug, Release
                def variantName = variant.name.capitalize()
                // now we tell gradle to always start lint after compile
                // e.g. start lintDebug after compileDebugSources
                project.tasks["compile${variantName}Sources"].doLast {
                    project.tasks["lint${variantName}"].execute()
                }
        }
    }
}
3
TmTron

Modification de la réponse de @Yoel Gluschnaider

Pour moi, si j'utilise val, il affiche une erreur comme celle-ci: Impossible de définir la propriété inconnue 'lintTask' pour l'objet de type com.Android.build.gradle.internal.api.ApplicationVariantImpl.

Donc je le remplace

applicationVariants.all {
    def lintTask = tasks["lint${name.capitalize()}"]
    assembleProvider.get().dependsOn.add(lintTask)
}

et son travail bien !!

1
Rushabh Shah