如何解决本机 Java 或 Kotlin 中的错误“在依赖项的 AAR 元数据中指定的 minCompileSdk (31)”? [复制]

Posted

技术标签:

【中文标题】如何解决本机 Java 或 Kotlin 中的错误“在依赖项的 AAR 元数据中指定的 minCompileSdk (31)”? [复制]【英文标题】:How can I resolve the error "The minCompileSdk (31) specified in a dependency's AAR metadata" in native Java or Kotlin? [duplicate] 【发布时间】:2021-11-01 04:51:31 【问题描述】:

错误信息:

在依赖项的 AAR 元数据中指定的 minCompileSdk (31) (META-INF/com/android/build/gradle/aar-metadata.properties) 更大 比这个模块的 compileSdkVersion (android-30)。依赖: androidx.core:core-ktx:1.7.0-alpha02.

AAR 元数据文件: C:\Users\mohammad.zeeshan1.gradle\caches\transforms-2\files-2.1\a20beb0771f59a8ddbbb8d416ea06a9d\jetified-core-ktx-1.7.0-alpha02\META-INF\com\android\build\gradle\aar-metadata .properties。

【问题讨论】:

(与这个问题不同,被提议的骗子有一个 MCVE) 简单的解决方案是让android compileSdk 30 到 compleSdk 31 通过让 targetSdkVersion = 31 & compileSdkVersion = 31 解决了我的问题。 youtube.com/watch?v=4gUzUuk9X0k -->OpenModuleSettings --> 依赖关系。然后降低 appcompat 的版本。 搜索引擎似乎更喜欢这个。这个问题目前在 Stack Overflow 上的top 20 in all younger questions(不到 2 岁左右)就查看率而言(自诞生以来每天大约有 800 次查看)。这超出了 5,000,000 个问题的数量级。 【参考方案1】:

在您的build.gradle(app) 文件中将compileSdkVersiontargetSdkVersion 设置为31

android 
    compileSdkVersion 31 // <-- This
    defaultConfig 
        applicationId "com.example.app"
        targetSdkVersion 31 // <-- and this too
        // ...
    

【讨论】:

检查这个库:实现 'androidx.appcompat:appcompat:1.4.0' 更改为 1.3.1 版本。并修复了 resolutionStrategy force 'androidx.core:core:1.6.0' 也.. 我将其更改为 31 后,Gradle 构建失败。【参考方案2】:

我找到了解决方案。在app Gradle文件中输入package上面这行代码。

对于 Kotlin 开发人员:

configurations.all 
    resolutionStrategy  force 'androidx.core:core-ktx:1.6.0' 

对于 Java 开发人员

configurations.all 
    resolutionStrategy  force 'androidx.core:core:1.6.0' 

【讨论】:

对于java开发者,去掉ktx:resolutionStrategy force 'androidx.core:core:1.6.0' 我在 ReactNative 上仍然遇到同样的问题。添加这条线在我的项目中没有成功。有没有其他方法可以解决这个问题? 为什么会这样?我真的很惊讶;我的项目 gradle 将 kotlin 版本定义为 1.5.10! 为什么要这样做,而不是将 core-ktx 版本降级到 1.6.0? - 我是一个手机菜鸟... 对于北极狐来说,这个黑客似乎不再有效。我不得不将 build.gradle(应用程序)中的 compileSdk 从 30 提高到 31,正如这个答案中提到的 ***.com/a/69283902/624814。【参考方案3】:

终于可以解决我的问题了。

出了什么问题?

我在一个模块中有以下依赖项-

implementation "androidx.core:core-ktx:+"

但其他模块,包括 app 模块,具有以下依赖项

implementation "androidx.core:core-ktx:1.6.0"

转换

implementation "androidx.core:core-ktx:+"

implementation "androidx.core:core-ktx:1.6.0"

解决了我的问题。

【讨论】:

对我来说,只要我清除“+”,它就会建议使用 1.6.0 版本,然后使用该版本进行编译。所以我认为你应该检查自动建议并使用这个值。【参考方案4】:

这个问题最常见于声明的库

implementation androidx.core:core-ktx:1.7.0-beta01

minCompileSdk 为 31,但minSdkVersion 明显更低。 增加项目的compileSdk 足以解决问题。无需覆盖甚至更改 targetSdk

android 
    compileSdk 31

...

【讨论】:

很好的答案。这是有关此问题的正确解决方案。由于修复了这个问题,我们可以改变 compile sdk。如果我们改变targetSdk,它会给出一些其他的问题,这不是这个问题修复所需要的。【参考方案5】:

在使用Jetpack Compose导航时,我遇到了这个问题...

我使用的是androidx.navigation:navigation-compose:2.4.0-alpha07

所以我用另一个版本解决了:

`androidx.navigation:navigation-compose:2.4.0-alpha06`

【讨论】:

问题存在于alpha07和alpha08。将其更改为 06 解决了我的问题。 (我想用 SDK 30 编译它,但从来没有版本需要 SDK 31)【参考方案6】:

您需要将编译 SDK 更新到 31。它听起来当前设置为 30。在您的 Gradle 文件中,android 中应该有类似 compileSdk 的内容块。

将其提高到 31。如果由于某种原因这是一个问题,您还可以将依赖项降低到不需要该编译 SDK 版本的版本。

【讨论】:

还有其他解决方案吗?我不能这样做,因为这样做后一些依赖关系会中断。 面临同样的问题..任何解决方案保持我的编译 sdk 版本 30 ? 使用实现“androidx.core:core-ktx:1.3.0”【参考方案7】:

几天前我在一个正在运行的 react-native 项目中遇到了这个问题,突然我收到了这个错误:

* What went wrong:
Execution failed for task ':app:checkDevDebugAarMetadata'.
> Multiple task action failures occurred:
   > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
      > 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.core:core-ktx:1.7.0-alpha02.
        AAR metadata file: /Users/me/.gradle/caches/transforms-2/files-2.1/ed22ee8b86d25659bbef1e9ee203b75c/jetified-core-ktx-1.7.0-alpha02/META-INF/com/android/build/gradle/aar-metadata.properties.
   > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
      > 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.core:core:1.7.0-alpha02.
        AAR metadata file: /Users/me/.gradle/caches/transforms-2/files-2.1/23234efc7e9de9bfe6a3fea85a6072ef/core-1.7.0-alpha02/META-INF/com/android/build/gradle/aar-metadata.properties.

阅读错误消息后,我了解到问题出在androidx.core:core-ktx,因此我对其进行了更多搜索,发现去年9月1日刚刚发布了一个新版本https://androidx.tech/artifacts/core/core-ktx/,即https://androidx.tech/artifacts/core/core-ktx/1.7.0-alpha02,其中targetSdkVersion = 31

我运行grep -r "androidx.core:core-ktx" node_modules 并发现我有一个具有implementation "androidx.core:core-ktx:+" 的依赖项,它将在我安装应用程序时安装最新版本。我不能只更新到 31,因为它似乎破坏了我的一些依赖项的代码,我会得到:

unrecognized Attribute name MODULE (class com.sun.tools.javac.util.SharedNameTable$NameImpl)

我真的不知道如何解决并且找不到任何线索,这很可能是因为它是新的。

作为一种解决方法,存档android/app/build.gradle

android 块之前添加以下块。

configurations.all 
    resolutionStrategy  force 'androidx.core:core-ktx:1.7.0-alpha01' 

这样做之后,它对我有用。它将强制所有androidx.core:core-ktx1.7.0-alpha01

【讨论】:

我跑了grep -r "androidx.core:core-ktx" node_modules 并没有得到任何输出。我仍然收到此错误。 我刚刚在我的 react-native 项目上为 android 构建时遇到了这个错误,这不是由于 androidx.core:core-ktx 而是由于 androidx.browser:browser。这来自库react-native-inappbrowser-reborn,它指定android 包版本为1+。一次 gradle 同步后,androidx.browser 版本 1.4.0-alpha01 被引入,导致这个错误。此处建议修复github.com/proyecto26/react-native-inappbrowser/issues/298 无论如何,您收到的关于 MODULE 等的错误将通过 JDK11 解决,JDK8 不适用于 API31 android sdk 级别【参考方案8】:

我遇到了同样的问题,发现问题出在生命周期库上。

我是从测试版改过来的,

androidx.lifecycle:lifecycle-livedata:2.4.0beta1

到当前稳定版本,

androidx.lifecycle:lifecycle-livedata:2.3.1

检查Android website for versions。

【讨论】:

现在即使是新的稳定版本 2.4.0 也会抛出这个错误。 这是唯一对我有用的解决方案,无需增加编译版本。谢谢

以上是关于如何解决本机 Java 或 Kotlin 中的错误“在依赖项的 AAR 元数据中指定的 minCompileSdk (31)”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 java 库添加到 kotlin 本机

如何在 iOS 项目中添加两个或多个 kotlin 原生模块

如何将 Kotlin 错误链接到 Android Studio 中的源?

如何解决此错误:ENOENT:没有此类文件或文件或目录,在本机错误时打开“/tmp/mt-1miyjxv/os.json”?

如何根据 android studio 中的 listview 项目点击更改活动图像和文本? java 或 kotlin

如何将改造回调响应中的回调从 java 转换为 Kotlin