Запустите lint при создании проектов студии Android
Я хотел бы иметь возможность запускать задачу lint, когда я строю проекты с помощью студии android, чтобы гарантировать соблюдение правил lint.
Я попытался использовать зависимости задач, но не повезло. Мой сервер сборки teamcity использует задачу сборки, которая запускает задачу lint, так что это отлично работает. Тем не менее, студия Android предлагает использовать функции generateDebugSources и compileDebugJava взаимозаменяемо, когда я выбрал вариант сборки отладки.
Вот что я пробовал в своем build.gradle:
assemble.dependsOn lint
Ответы
Ответ 1
Если вы просто хотите настроить проект Android Studio для запуска проверки линзы перед конфигурацией запуска по умолчанию, не затрагивая настройки ваших задач gradle, вы можете выполнить следующие действия.
- Откройте конфигурацию прогона и выберите edit
![enter image description here]()
- Выберите конфигурацию вашего приложения.
![enter image description here]()
- Нажмите "+", чтобы добавить новый шаг.
![enter image description here]()
- Выберите "Gradle -aware Make"
![enter image description here]()
- Введите "check" и выберите вариант с именем вашего модуля приложения и проверьте. (Mine
:app:check
)
![enter image description here]()
- Нажмите стрелку вверх, чтобы переместить новый шаг
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)
}
и его работа отлично !!