Введение: Ваш проект не собирается? Вы не одиноки
Представьте: вы пишете на Kotlin, всё идёт отлично, но вдруг — бац! — сборка падает с загадочным сообщением: The minCompileSdk (31) specified in a dependency's AAR metadata. Знакомая боль? Эта ошибка — один из самых популярных «граблей» на Stack Overflow (тысячи просмотров и сотни комментариев). Она возникает, когда вы используете библиотеку, которая требует более новую версию compileSdk, чем настроена в вашем проекте.
В этой статье мы разберём, как исправить ошибку minCompileSdk (31) в AAR метаданных для проектов на Kotlin и Java. Вы узнаете причины, получите готовые решения и поймёте, как избежать этой проблемы в будущем. Поехали!
Что такое minCompileSdk и почему он ломает сборку?
Начнём с теории. Каждый Android-проект имеет свой compileSdk — версию Android SDK, с которой он компилируется. Библиотеки (AAR) тоже могут указывать минимальный compileSdk, который им нужен. Если ваша версия ниже — Gradle выдаёт ошибку. Это защита от несовместимости: библиотека может использовать API, которых нет в старых SDK.
Ошибка The minCompileSdk (31) specified in a dependency's AAR metadata буквально говорит: «Эй, эта библиотека требует компиляции с SDK 31 (Android 12) или выше, а у тебя стоит меньше!».
Типичные сценарии возникновения
- Вы добавили новую библиотеку (например,
androidx.composeилиFirebase), которая обновилась до требований SDK 31+. - Вы используете старый шаблон проекта с
compileSdk = 30. - Вы забыли обновить Gradle и SDK Tools.
Как исправить ошибку minCompileSdk (31) в AAR: 3 проверенных способа
Вот пошаговые решения для Kotlin и Java. Обратите внимание: код везде на Kotlin (DSL), но логика одинакова для Groovy.
Способ 1: Повысить compileSdk (рекомендуется)
Самый правильный путь — обновить compileSdk до версии, требуемой библиотекой. Обычно это 31 (Android 12) или 33 (Android 13).
Шаги:
- Откройте файл
build.gradle.kts(уровень модуляapp). - Найдите секцию
android. - Измените
compileSdkна требуемое значение.
android {
compileSdk = 33 // Или 31, 32 — в зависимости от требований
defaultConfig {
minSdk = 21
targetSdk = 33
// ...
}
}
Почему это работает? Вы просто соответствуете требованиям зависимости. Если библиотека просит SDK 31, дайте ей SDK 31. Не забудьте также установить соответствующий SDK в Android Studio (SDK Manager → Android 12.0 (API 31)).
Способ 2: Понизить версию библиотеки
Если вы не хотите повышать compileSdk (например, из-за совместимости со старыми устройствами), можно откатить библиотеку до версии, которая не требует SDK 31.
Пример: Вместо implementation("androidx.compose:compose-bom:2023.10.01") используйте более старую версию, например 2022.10.00.
dependencies {
// Было (вызывает ошибку)
// implementation("androidx.compose:compose-bom:2023.10.01")
// Стало (стабильная версия без требования SDK 31+)
implementation("androidx.compose:compose-bom:2022.10.00")
}
Это временное решение, но оно помогает, если вы застряли на старом SDK. Главный минус — вы теряете новые фичи и исправления безопасности.
Способ 3: Переопределить minCompileSdk через Gradle (экзотика)
Существует хитрый, но недокументированный метод — переопределить метаданные AAR через конфигурацию Gradle. Этот способ не рекомендуется для продакшена, но может спасти, если библиотека не обновляется.
android {
// Принудительно игнорируем проверку minCompileSdk
configurations.all {
resolutionStrategy.eachDependency {
if (requested.group == "com.example.library") { // замените на свою библиотеку
useTarget("com.example.library:library:1.0.0") // версия без требований
}
}
}
}
Это костыль. Лучше использовать первые два способа.
Частые вопросы (FAQ) об ошибке minCompileSdk
Вопрос 1: Почему ошибка появляется только сейчас, хотя раньше всё работало?
Скорее всего, вы обновили одну из зависимостей. Библиотеки постоянно поднимают минимальные требования. Например, AndroidX Core в версии 1.9.0 начал требовать compileSdk 31. Решение — обновить compileSdk или зафиксировать старую версию библиотеки.
Вопрос 2: Как узнать, какая именно библиотека вызывает ошибку?
Gradle обычно пишет название библиотеки в логах. Ищите строку minCompileSdk (31) specified in a dependency's AAR metadata — рядом будет указан модуль. Если не видно, запустите ./gradlew app:dependencies и найдите зависимости с minCompileSdk.
Вопрос 3: Может ли эта ошибка возникнуть в Java-проекте?
Да, абсолютно. Ошибка не зависит от языка — она на уровне Gradle и AAR. В Java вы делаете то же самое, только в build.gradle (Groovy).
Вопрос 4: Что будет, если я повышу compileSdk, но не обновлю targetSdk?
Ничего страшного. compileSdk — это только компиляция. Вы можете компилировать с SDK 33, а targetSdk оставить 30. Но для новых приложений в Google Play требуется targetSdk 31+ (с 2023 года).
Пошаговый чек-лист для быстрого исправления
- Прочитайте сообщение об ошибке — найдите имя библиотеки (например,
androidx.compose.ui). - Проверьте текущий compileSdk — откройте
build.gradle.kts(или.gradle). - Обновите compileSdk до 33 (или 34, если используете последние библиотеки).
- Синхронизируйте проект (File → Sync Project with Gradle Files).
- Если ошибка осталась
Блоги
Рекомендаций по книгам
Читайте также
Работа с JSON в Java: парсинг и сериализация для начинающих
Zero-downtime деплой C#: обновляем сервис без простоев
Генерация случайных чисел в Java в заданном диапазоне: туториал
Event-driven архитектура на Kotlin: от корутин до реактивных стримов
Микросервисы на Kotlin: архитектура и практика от А до Я