Запустите lint при создании проектов студии Android

Я хотел бы иметь возможность запускать задачу lint, когда я строю проекты с помощью студии android, чтобы гарантировать соблюдение правил lint.

Я попытался использовать зависимости задач, но не повезло. Мой сервер сборки teamcity использует задачу сборки, которая запускает задачу lint, так что это отлично работает. Тем не менее, студия Android предлагает использовать функции generateDebugSources и compileDebugJava взаимозаменяемо, когда я выбрал вариант сборки отладки.

Вот что я пробовал в своем build.gradle:

assemble.dependsOn lint

Ответ 1

Если вы просто хотите настроить проект Android Studio для запуска проверки линзы перед конфигурацией запуска по умолчанию, не затрагивая настройки ваших задач gradle, вы можете выполнить следующие действия.

  • Откройте конфигурацию прогона и выберите edit

enter image description here

  1. Выберите конфигурацию вашего приложения.

enter image description here

  1. Нажмите "+", чтобы добавить новый шаг.

enter image description here

  1. Выберите "Gradle -aware Make"

enter image description here

  1. Введите "check" и выберите вариант с именем вашего модуля приложения и проверьте. (Mine :app:check)

enter image description here

  1. Нажмите стрелку вверх, чтобы переместить новый шаг check до существующего шага Gradle-aware make

enter image description here

Теперь Android Studio запустит проверку lint и выйдет из строя, если будут возникать ошибки lint.

Ответ 2

Чтобы запустить и проанализировать проект, просто выберите Analyze > Inspect Code.

Вы должны получить хорошее окно со всеми проблемами.

enter image description here

Также проверьте Запустить lint в Android Studio для получения дополнительной информации.


Я сделал немного больше исследований, попробуйте добавить это к вашему build.gradle.

lintOptions {
      abortOnError true
  } 

Существует много параметров, которые вы можете применить к build.gradle

Ответ 3

Чтобы сделать это в build.gradle, добавьте следующие строки в ваш build.gradle:

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

Это делает все ваши задачи сборки зависимыми от задачи lint, эффективно выполняющей их перед каждым вызовом сборки, который выполняется Android Studio.

редактировать

С Android Gradle Plugin 3.3 и Gradle 5.x это пересмотренная версия с использованием скрипта Kotlin:

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

Ответ 4

просто запустите задачу "Проверить"

./gradlew clean check assembleRelease

Ответ 5

Если вы хотите, чтобы проект Android Studio запускал проверку на линт перед настройкой запуска по умолчанию, не влияя на то, как сконфигурированы ваши задачи градации. И вы хотите сделать это в системе построения градиентов, вы можете добавить следующий блок вне android блок в модуле app build.gradle следующим образом:

android {
....
    lintOptions {
        abortOnError true
    }
}

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

Замените compileDevDebugSources на желаемый вариант сборки, который вы уже определили, например. compileReleaseSources, compileDebugSources, compileStagingDebugSources и т.д.

Это было протестировано на Android Studio 3.0

Ответ 6

вот мое решение, которое также работает, когда вы нажимаете "Build - Make Project" в 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()
                }
        }
    }
}

Ответ 7

Просто изменив ответ @Yoel Gluschnaider

Для меня, если я использую val, это выдает ошибку вроде этого: Не удалось установить неизвестное свойство 'lintTask' для объекта типа com.android.build.gradle.internal.api.ApplicationVariantImpl.

Так я заменяю

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

и его работа отлично !!