Это предупреждение , оно не оказывает негативного влияния на вашу сборку. Вы можете пойти дальше и обновить до AGP 3.3.0 .
Новый плагин Android Gradle начал использовать ленивую конфигурацию (API предотвращения задач и API провайдера), которая при правильном использовании может повысить скорость сборки, оценивая только необходимые задачи и свойства. Потребители AGP должны использовать обновленный API (например, getAssembleProvider().configure()
вместо getAssemble()
), в противном случае задачи и свойства всегда оцениваются.
Смысл ленивого API: не настраивать задачи, которые не будут запускаться в конкретной сборке.
Подробнее:
Что делать
Если это не из вашего кода, вам нечего делать, кроме как ждать обновленных библиотек (и молиться, чтобы они делали это правильно).
Если он исходит из вашего кода, вот пример миграции: я использую этот фрагмент кода от Джейка Уортона, чтобы отключить генерацию BuildConfig.java
для моих библиотечных модулей.
libraryVariants.all {
it.generateBuildConfig.enabled = false
}
При использовании нового ленивого API это выглядит следующим образом.
libraryVariants.all {
it.generateBuildConfigProvider.configure {
it.enabled = false
}
}
Стремительный API приведет к настройке задачи generateBuildConfig
, даже если она мне не понадобится, например, запуск clean
. Ленивый API настраивает задачу , только если является частью графика задачи для запуска. Это экономит время на этапе настройки.
Как выяснить, исходит ли оно из вашего кода? Поместите это в ваш gradle.properties
android.debug.obsoleteApi=true
Теперь запустите сборку и проверьте вывод на наличие следов стека.
Полная ошибка
Для полноты вот пример полного сообщения об ошибке, вызванного плагином Fabric 1.27.0 с AGP 3.3.0:
WARNING: API 'variant.getExternalNativeBuildTasks()' is obsolete and has been replaced with 'variant.getExternalNativeBuildProviders()'.
It will be removed at the end of 2019.
For more information, see https://d.android.com/r/tools/task-configuration-avoidance.
To determine what is calling variant.getExternalNativeBuildTasks(), use -Pandroid.debug.obsoleteApi=true on the command line to display a stack trace.
Плохой пример
Вот пример того, как Facebook React справился с миграцией API в своем плагине: https://github.com/facebook/react-native/pull/23103/files
Другими словами, они этого не сделали. taskProvider.get()
равно task
- оба стремятся. Задачи всегда настроены.
Единственное, что достигается этим подходом, это удаление предупреждения, поэтому
- потребитель не знает, что он не получает никаких преимуществ от ленивого API,
- автору плагина больше не напоминают, что он использует его неправильно.
Документы API по предотвращению конфигурирования задач содержат руководство по миграции и полезную таблицу, описывающую, как создавать задачи и выполнять их лениво. Если вы автор плагина, прочтите его.