引言:您的项目无法构建?您并不孤单
\n\n想象一下:您正在用 Kotlin 编写代码,一切进展顺利,但突然——砰!——构建失败,并出现一条神秘消息:The minCompileSdk (31) specified in a dependency's AAR metadata。是不是很熟悉?这个错误是 Stack Overflow 上最流行的“陷阱”之一(数千次浏览和数百条评论)。当您使用的库需要比您项目中配置的 compileSdk 版本更新的版本时,就会发生这种情况。
在本文中,我们将详细分析如何修复 Kotlin 和 Java 项目中 AAR 元数据中的 minCompileSdk (31) 错误。您将了解原因,获得现成的解决方案,并了解将来如何避免此问题。开始吧!
\n\n什么是 minCompileSdk,它为什么会破坏构建?
\n\n从理论开始。每个 Android 项目都有自己的 compileSdk——用于编译的 Android SDK 版本。库(AAR)也可以指定它们所需的最低 compileSdk。如果您的版本较低——Gradle 就会报错。这是为了防止不兼容:库可能使用了旧版 SDK 中没有的 API。
错误 The minCompileSdk (31) specified in a dependency's AAR metadata 字面意思是:“嘿,这个库需要 SDK 31 (Android 12) 或更高版本才能编译,而你的版本更低!”
典型的发生场景
\n- \n
- 您添加了一个新库(例如
androidx.compose或Firebase),该库已更新为要求 SDK 31+。 \n - 您使用了一个旧的
compileSdk = 30的项目模板。 \n - 您忘记更新 Gradle 和 SDK Tools。 \n
如何修复 AAR 中的 minCompileSdk (31) 错误:3 种经过验证的方法
\n\n以下是针对 Kotlin 和 Java 的分步解决方案。请注意:代码全部使用 Kotlin (DSL),但逻辑对于 Groovy 是相同的。
\n\n方法 1:提高 compileSdk(推荐)
\n最正确的方法是将 compileSdk 更新到库所需的版本。通常是 31 (Android 12) 或 33 (Android 13)。
步骤:
\n- \n
- 打开
build.gradle.kts文件(模块级别app)。 \n - 找到
android部分。 \n - 将
compileSdk更改为所需的值。 \n
android {\n compileSdk = 33 // 或 31, 32 — 取决于要求\n\n defaultConfig {\n minSdk = 21\n targetSdk = 33\n // ...\n }\n}\n\n\n为什么有效? 您只是满足了依赖项的要求。如果库要求 SDK 31,就给它 SDK 31。别忘了还要在 Android Studio 中安装相应的 SDK(SDK Manager → Android 12.0 (API 31))。
\n\n方法 2:降低库版本
\n如果您不想提高 compileSdk(例如,出于与旧设备的兼容性考虑),可以将库回退到不需要 SDK 31 的版本。
示例: 不使用 implementation("androidx.compose:compose-bom:2023.10.01"),而是使用更旧的版本,例如 2022.10.00。
dependencies {\n // 之前(导致错误)\n // implementation("androidx.compose:compose-bom:2023.10.01")\n\n // 之后(不需要 SDK 31+ 的稳定版本)\n implementation("androidx.compose:compose-bom:2022.10.00")\n}\n\n\n这是一个临时解决方案,但如果您困在旧版 SDK 上,它会有所帮助。主要缺点是您会失去新功能和安全修复。
\n\n方法 3:通过 Gradle 覆盖 minCompileSdk(非常规方法)
\n有一种巧妙但未记录的方法——通过 Gradle 配置覆盖 AAR 元数据。此方法不推荐用于生产环境,但如果库不更新,它可以救急。
\n\nandr