Ошибка "The minCompileSdk (31) specified in a dependency's AAR metadata" в Android/Kotlin проекте
Причина ошибки
Ошибка возникает из-за того, что библиотека androidx.activity:activity-ktx:1.4.0 требует для компиляции compileSdkVersion не ниже 31 (Android 12), а в вашем проекте установлено 30. Начиная с Android Gradle Plugin 7.0, AAR-файлы содержат метаданные с требованием минимальной версии SDK для компиляции. Если ваша версия ниже — сборка падает.
Решение 1: Повысить compileSdkVersion (рекомендуется)
Самый правильный способ — обновить compileSdkVersion до 31 или выше. Это не влияет на работу приложения на старых устройствах (за это отвечает minSdkVersion), а только говорит компилятору, какие API доступны.
Измените ваш build.gradle (уровень модуля):
android {
compileSdkVersion(31) // или 33, 34 — актуальная версия
buildToolsVersion("30.0.3")
defaultConfig {
minSdkVersion(21)
targetSdkVersion(31) // рекомендуется синхронизировать с compileSdk
}
}
Также обновите targetSdkVersion до 31, чтобы использовать новые функции. Не забудьте синхронизировать проект (File → Sync Project with Gradle Files).
Решение 2: Понизить версию библиотеки
Если по каким-то причинам вы не можете повысить compileSdkVersion, используйте более старую версию библиотеки, совместимую с SDK 30. Например:
implementation("androidx.activity:activity-ktx:1.3.1") // последняя версия для compileSdk 30
Но учтите: вы потеряете новые фиксы и функции, и рано или поздно придётся обновляться.
Дополнительные советы
- Проверьте другие зависимости. Аналогичная ошибка может возникнуть с библиотеками Jetpack (fragment-ktx, compose и т.д.). Всегда смотрите документацию на Android Developers.
- Используйте BOM (Bill of Materials). Это упрощает управление версиями:
implementation(platform("androidx.compose:compose-bom:2023.10.01"))
implementation("androidx.activity:activity-compose")
BOM автоматически подбирает совместимые версии библиотек.
- Обновите Android Gradle Plugin. В старых версиях AGP (ниже 7.0) этой проверки не было, но лучше использовать актуальную версию.
После любого из этих решений выполните Build → Clean Project и Build → Rebuild Project. Ошибка должна исчезнуть.
Альтернативный подход: использование compileSdkPreview
Если вам нужно использовать библиотеку, требующую SDK 31, но вы не хотите обновлять финальную версию, можно временно установить compileSdkPreview("Tiramisu") (для Android 13) или ("S") (для Android 12). Это экспериментальная функция, позволяющая компилировать с превью-версией SDK.
android {
compileSdkPreview("S") // Android 12 preview
// остальные настройки
}
Но этот способ не рекомендуется для production, так как превью-версии нестабильны и могут содержать баги.
Дополнение: автоматизация с помощью Gradle
Можно добавить проверку в build.gradle на уровне проекта, чтобы избежать ручного обновления каждой библиотеки:
subprojects {
afterEvaluate { project ->
if (project.plugins.hasPlugin("com.android.application") ||
project.plugins.hasPlugin("com.android.library")) {
android {
compileSdkVersion(33) // единая версия для всех модулей
}
}
}
}
Это гарантирует, что все модули используют одинаковый compileSdk, и ошибка не возникнет из-за рассинхронизации.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги