Инструменты сборки 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, или переход на инструменты сборки Gradle 4.0.1, любой из них заставляет его снова работать
  • запуск любой команды на терминале за пределами Android Studio, он работает нормально, проблема, похоже, только в операции синхронизации AS.

Вопрос

У кого-нибудь еще есть такая же проблема?

1 ответ

Решение

Об этой проблеме сообщается в тикете https://issuetracker.google.com/issues/170656529.

На данный момент способ обойти это - пропустить логику, вызывающую проблемы при тестировании IDE для idea.active системное свойство:

if(System.getProperty("idea.active") != "true"){
  tasks.whenTaskAdded {
    (...)
  }
}

(Спасибо, Джерри, что нашел билет)

Другие вопросы по тегам