minCompileSdk (31) 的诅咒:如何在 Kotlin 中解决 AAR 错误

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:您的项目无法构建?您并不孤单

\n\n

想象一下:您正在用 Kotlin 编写代码,一切进展顺利,但突然——砰!——构建失败,并出现一条神秘消息:The minCompileSdk (31) specified in a dependency's AAR metadata。是不是很熟悉?这个错误是 Stack Overflow 上最流行的“陷阱”之一(数千次浏览和数百条评论)。当您使用的库需要比您项目中配置的 compileSdk 版本更新的版本时,就会发生这种情况。

\n\n

在本文中,我们将详细分析如何修复 Kotlin 和 Java 项目中 AAR 元数据中的 minCompileSdk (31) 错误。您将了解原因,获得现成的解决方案,并了解将来如何避免此问题。开始吧!

\n\n

什么是 minCompileSdk,它为什么会破坏构建?

\n\n

从理论开始。每个 Android 项目都有自己的 compileSdk——用于编译的 Android SDK 版本。库(AAR)也可以指定它们所需的最低 compileSdk。如果您的版本较低——Gradle 就会报错。这是为了防止不兼容:库可能使用了旧版 SDK 中没有的 API。

\n\n

错误 The minCompileSdk (31) specified in a dependency's AAR metadata 字面意思是:“嘿,这个库需要 SDK 31 (Android 12) 或更高版本才能编译,而你的版本更低!”

\n\n

典型的发生场景

\n
    \n
  • 您添加了一个新库(例如 androidx.compose 或 Firebase),该库已更新为要求 SDK 31+。
  • \n
  • 您使用了一个旧的 compileSdk = 30 的项目模板。
  • \n
  • 您忘记更新 Gradle 和 SDK Tools。
  • \n
\n\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

步骤:

\n
    \n
  1. 打开 build.gradle.kts 文件(模块级别 app)。
  2. \n
  3. 找到 android 部分。
  4. \n
  5. 将 compileSdk 更改为所需的值。
  6. \n
\n\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 的版本。

\n\n

示例: 不使用 implementation("androidx.compose:compose-bom:2023.10.01"),而是使用更旧的版本,例如 2022.10.00。

\n\n
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\n
andr                

博客

书籍推荐