Проклятие minCompileSdk (31): как победить ошибку AAR в Kotlin

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: Ваш проект не собирается? Вы не одиноки

Представьте: вы пишете на 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).

Шаги:

  1. Откройте файл build.gradle.kts (уровень модуля app).
  2. Найдите секцию android.
  3. Измените 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 года).

Пошаговый чек-лист для быстрого исправления

  1. Прочитайте сообщение об ошибке — найдите имя библиотеки (например, androidx.compose.ui).
  2. Проверьте текущий compileSdk — откройте build.gradle.kts (или .gradle).
  3. Обновите compileSdk до 33 (или 34, если используете последние библиотеки).
  4. Синхронизируйте проект (File → Sync Project with Gradle Files).
  5. Если ошибка осталась

    Блоги

    Рекомендаций по книгам