Инструменты сборки Gradle 4.1.0 не синхронизируются в Android Studio при наличии зависимости lintCheck
У нас есть многомодульный проект Android с пользовательскими проверками линтов, и мы пытаемся перейти на инструменты сборки Android Gradle 4.1.0, но синхронизация gradle в Android Studio 4.1.0 не работает.
Допустим, у нас есть два модуля (плюс несколько нерелевантных "библиотечных" модулей):
app
(основной модуль приложения)lintchecks
(пользовательские правила линта)
app
использует обычай
lintchecks
модуль, в
app/build.gradle
:
lintChecks project(":lintchecks")
Теперь предположим, что есть какой-то настраиваемый плагин (например, в
buildSrc
) или конфигурации с использованием комбинации
subprojects
и
tasks.whenTaskAdded
. Например, в
./build.gradle
:
subprojects {
tasks.whenTaskAdded {
// content not important
}
}
В этом нет ничего особенного
lintcheck
конфигурация. Например в
lintchecks/build.gradle
:
apply plugin: 'kotlin'
dependencies {
compileOnly "com.android.tools.lint:lint-api:27.1.0"
compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
testImplementation "com.android.tools.lint:lint:27.1.0"
testImplementation "com.android.tools.lint:lint-tests:27.1.0"
testImplementation "com.android.tools:testutils:27.1.0"
}
jar {
manifest {
attributes("Lint-Registry-v2": "com.company.lintrules.IssueRegistry")
}
}
При синхронизации Android Studio все время происходил сбой с ошибкой, похожей на:
A problem occurred evaluating project ':lintrules'.
> Failed to apply plugin 'kotlin'.
> Gradle#projectsEvaluated(Action) on build 'MyCompanyBuild' cannot be executed in the current context.
В итоге
Кажется, проблема заключается в комбинации Android Studio 4.1.0 + инструменты сборки Gradle 4.1.0 +lintCheck()
+ tasks.whenTaskAdded {}
.
Что я пробовал
- разные плагины в
lintrules/build.xml
, напримерmaven-publish
,org.jetbrains.kotlin.jvm
, тот же результат ошибки - другой способ объявить плагин, например
plugins { id (...) }
противapply plugin: '...'
, тот же результат ошибки - старые версии lint-зависимостей
- удаление
lintCheck
, или удалениеtasks.whenTaskAdded
, или переход на инструменты сборки Gradle4.0.1
, любой из них заставляет его снова работать - запуск любой команды на терминале за пределами Android Studio, он работает нормально, проблема, похоже, только в операции синхронизации AS.
Вопрос
У кого-нибудь еще есть такая же проблема?
1 ответ
Об этой проблеме сообщается в тикете https://issuetracker.google.com/issues/170656529.
На данный момент способ обойти это - пропустить логику, вызывающую проблемы при тестировании IDE для
idea.active
системное свойство:
if(System.getProperty("idea.active") != "true"){
tasks.whenTaskAdded {
(...)
}
}
(Спасибо, Джерри, что нашел билет)