Устаревший RegisterResGeneratingTask в Android Gradle плагине: как исправить?
Почему возникает предупреждение и как оно влияет на проект?
Предупреждение RegisterResGeneratingTask is deprecated появляется при использовании Android Gradle Plugin (AGP) версии 3.0.0 и выше. Это связано с тем, что внутренний API плагина был изменён: старый метод registerResGeneratingTask (используемый для регистрации задач по генерации ресурсов) заменён на более гибкий registerGeneratedFolders(FileCollection). Само предупреждение не блокирует сборку, но указывает на использование устаревшего API, который может быть удалён в будущих версиях AGP.
Обычно проблема возникает, если вы используете библиотеки или плагины, которые совместимы только со старыми версиями AGP, либо если у вас в проекте есть кастомные Gradle-таски, написанные до выхода AGP 3.0. Если вы не писали свои таски, значит, предупреждение исходит от одной из зависимостей — например, от старой версии Kotlin плагина или библиотеки поддержки.
Решение: обновление зависимостей и плагинов
Самый надёжный способ — обновить все компоненты до актуальных версий. Вот пошаговая инструкция:
- Обновите Android Gradle Plugin в корневом
build.gradle:
buildscript {
ext.kotlin_version = '1.3.61' // или новее
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3' // замените на 3.5.3 или новее
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
- Обновите Kotlin до версии 1.3.61+ (или 1.4.x) — в старых версиях (до 1.2) была несовместимость с AGP 3.0+:
ext.kotlin_version = '1.3.61' // в корневом build.gradle
- Обновите библиотеки поддержки в модульном
build.gradle. Замените старыеcom.android.supportнаandroidx(если проект мигрирует) или хотя бы на последние версии support-библиотек (28.0.0):
dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
// остальные зависимости
}
- Очистите кеш и пересоберите проект:
./gradlew clean build
Альтернативный способ: явное подавление предупреждения
Если обновить зависимости невозможно (например, из-за устаревшего API), вы можете отключить это конкретное предупреждение. Добавьте в файл gradle.properties:
android.suppressDeprecatedApiWarning=true
Важно: Это лишь скрывает предупреждение, но не решает проблему. Рекомендуется только как временная мера.
Проверка после исправления
После обновлений запустите ./gradlew assembleDebug --info и убедитесь, что предупреждение исчезло. Если оно остаётся, проверьте, не используете ли вы сторонние Gradle-плагины (например, com.google.gms:google-services) — их тоже нужно обновить до версий, совместимых с AGP 3.5+.
Ручное исправление через Gradle-скрипт
Если обновление не помогло (например, вы используете кастомные таски для генерации ресурсов), можно заменить устаревший вызов вручную. Найдите в своём проекте (или в build.gradle) места, где используется registerResGeneratingTask, и замените на новый API:
// Было (устаревшее):
// registerResGeneratingTask(myTask)
// Стало (новый способ):
registerGeneratedFolders(myTask.outputDir)
Также проверьте, не используете ли вы плагины, которые генерируют ресурсы (например, com.github.bumptech.glide:glide или com.google.dagger:dagger). В этом случае обновите их до версий, поддерживающих AGP 3.5+. Если плагин не обновляется, попробуйте отключить его генерацию ресурсов через options { generatedFolders = [] } в android { } блоке.
Дополнительный совет: В AGP 3.0+ появилась возможность указать папки для сгенерированных ресурсов в sourceSets:
android {
sourceSets {
getByName("main") {
res.srcDirs = listOf("src/main/res", "src/generated/res")
}
}
}
Этот подход более гибкий и не требует использования устаревших тасков. Убедитесь, что ваша среда разработки (Android Studio) обновлена до последней версии, чтобы избежать подобных предупреждений в будущем.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги