Ошибка "The minCompileSdk (31) specified in a dependency's AAR metadata" в Android/Kotlin
Причина ошибки
Ошибка возникает из-за несовместимости версий: библиотека 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-проектах.