Avatar ·

Ошибка "The minCompileSdk (31) specified in a dependency's AAR metadata" в Android/Kotlin

Привет, коллеги! Я начинающий Android-разработчик на Kotlin, и у меня возникла проблема при сборке проекта. Я использую Android Studio и Gradle. В моем проекте есть зависимость от библиотеки для работы с камерой (CameraX). Недавно я обновил ее до последней версии, и после этого сборка перестала работать. Вот мой build.gradle (уровня модуля): ```kotlin plugins { id("com.android.application") id("org.jetbrains.kotlin.android") } android { namespace = "com.example.myapp" compileSdk = 30 // ... defaultConfig { minSdk = 26 targetSdk = 30 } } dependencies { implementation("androidx.camera:camera-core:1.3.0") implementation("androidx.camera:camera-camera2:1.3.0") // другие зависимости } ``` При попытке собрать проект я получаю ошибку: ``` Execution failed for task ':app:checkDebugAarMetadata'. > A failure occurred while executing androidx.build.gradle.checkdebugaarchecker > The minCompileSdk (31) specified in a dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties) is greater than this module's compileSdkVersion (android-30). Dependency: androidx.camera:camera-core:1.3.0. ``` Я понимаю, что библиотека требует compileSdk 31, но у меня стоит 30. Как это исправить? Мне нужно менять compileSdk на 31? Не повлияет ли это на работу приложения на старых устройствах? Заранее спасибо за помощь! <<>>

Причина ошибки

Ошибка возникает из-за несовместимости версий: библиотека CameraX 1.3.0 была собрана с compileSdk = 31 (Android 12), а ваш проект использует compileSdk = 30. AAR-метаданные каждой библиотеки содержат минимальный compileSdk, необходимый для её использования. Gradle проверяет это на этапе checkDebugAarMetadata и блокирует сборку, если версия проекта ниже.

Решение: повысить compileSdk до 31

Самый простой и правильный способ — увеличить compileSdk в вашем build.gradle до 31 (или выше, если библиотека требует более новую версию). Это безопасно, так как compileSdk не влияет на минимальную версию Android, на которой будет работать приложение. Он лишь определяет, какие API из последних версий Android вы можете использовать при компиляции.

Измените ваш build.gradle (уровня модуля):


android {
    compileSdk = 31  // было 30

    defaultConfig {
        minSdk = 26  // не меняем — приложение будет работать на Android 8.0+
        targetSdk = 31 // рекомендуется обновить до 31
    }
}

После этого обязательно синхронизируйте проект (File → Sync Project with Gradle Files) и пересоберите его. Ошибка должна исчезнуть.

Почему это безопасно?

  • compileSdk — это версия SDK, которую Gradle использует для компиляции кода. Она не влияет на поведение приложения на устройствах.
  • minSdk остаётся прежним (26), поэтому ваше приложение по-прежнему будет поддерживать устройства с Android 8.0 и выше.
  • targetSdk рекомендуется обновлять до последней версии, с которой библиотека совместима, чтобы избежать проблем с поведением на новых Android-версиях.

Альтернативный вариант: понизить версию библиотеки

Если по каким-то причинам вы не можете повысить compileSdk (например, из-за корпоративных ограничений), можно откатить зависимость до версии, которая поддерживает compileSdk = 30. Для CameraX это версия 1.1.0 или ниже:


dependencies {
    implementation("androidx.camera:camera-core:1.1.0")
    implementation("androidx.camera:camera-camera2:1.1.0")
}

Но это не рекомендуется, так как вы потеряете новые функции и исправления ошибок.

Дополнительная проверка

Если после изменения compileSdk ошибка остаётся, проверьте, нет ли других зависимостей с похожими требованиями. Выполните в терминале:

./gradlew app:dependencies

Это покажет дерево зависимостей. Ищите библиотеки с minCompileSdk выше вашего текущего compileSdk.

В итоге: повышение compileSdk — стандартная практика при обновлении библиотек. Это не ломает совместимость со старыми устройствами и решает проблему.

<<>>

Решение через Gradle-блокировку проверки (не рекомендуется)

Если по каким-то причинам вы не можете изменить compileSdk (например, проект legacy и требует строгой версии SDK), можно отключить проверку AAR-метаданных. Однако это опасно: вы можете получить ошибки во время выполнения, если библиотека использует API, недоступные в вашем compileSdk.

Добавьте в build.gradle (уровня модуля) внутри блока android:


android {
    // ... остальные настройки

    packaging {
        resources {
            excludes += "/META-INF/com/android/build/gradle/aar-metadata.properties"
        }
    }
}

Или, как вариант, в gradle.properties добавьте:


android.disableAarMetadataCheck=true

Почему это плохое решение?

  • Вы лишаетесь защиты от несовместимости библиотек.
  • Приложение может упасть с NoSuchMethodError или ClassNotFoundException на старых устройствах.
  • Это усложнит отладку будущих проблем.

Лучше всё же повысить compileSdk — это безопасно, быстро и решает проблему на корню. Отключение проверки — крайняя мера, если у вас нет другого выхода, но я настоятельно рекомендую не использовать этот подход в production-проектах.