设置compileSdkVersion为30时执行:app:checkDebugAarMetadata失败怎么解决
问题原因
你遇到的报错本质是依赖传递版本与当前编译版本不匹配:
你声明的com.google.android.material:material:1.5.0-alpha02这个alpha版本的依赖,自身的minCompileSdk要求就是31,它的传递依赖会自动拉取适配31的androidx核心库、appcompat库、lifecycle库等。哪怕你手动指定了appcompat:1.3.1(该版本支持compileSdk30),Gradle的默认依赖仲裁规则也会优先选择更高的版本,最终实际引入的是要求minCompileSdk31的库版本,和你当前设置的compileSdk30冲突就触发了报错。
至于你其他项目中targetSdk30+compileSdk31的组合能正常运行,是因为compileSdk只决定你编译代码时用的Android SDK版本,和运行时行为无关,只要compileSdk大于等于依赖要求的minCompileSdk就能正常编译。
解决方案
方案1(推荐,改动最小)
直接将compileSdkVersion升级到31即可,targetSdkVersion可以保持30不变。这个改动不会影响你App的运行兼容逻辑,也不需要修改任何业务代码,完全符合你其他项目的可用配置逻辑。
方案2(适配compileSdk30的场景)
降级高版本的依赖到适配compileSdk30的版本:
将com.google.android.material:material的版本从1.5.0-alpha02降到1.4.0稳定版即可,该版本的传递依赖都适配compileSdk30,不会触发版本冲突。修改后依赖声明如下:
implementation 'com.google.android.material:material:1.4.0'
方案3(强制锁定依赖版本,不推荐)
如果不愿意修改依赖版本,也可以在模块的build.gradle中添加强制版本锁定规则,手动指定所有冲突依赖的版本为支持compileSdk30的版本:
android { // 原有配置不变 } configurations.all { resolutionStrategy { // 强制指定所有冲突依赖的版本为支持compileSdk30的版本 force 'androidx.appcompat:appcompat:1.3.1' force 'androidx.appcompat:appcompat-resources:1.3.1' force 'androidx.core:core:1.6.0' force 'androidx.lifecycle:lifecycle-process:2.3.1' force 'androidx.lifecycle:lifecycle-runtime:2.3.1' force 'androidx.emoji2:emoji2:1.0.0-alpha03' force 'androidx.emoji2:emoji2-views-helper:1.0.0-alpha03' } }
该方案可能引发后续的依赖兼容异常,仅做临时排查使用。
内容的提问来源于stack exchange,提问作者Kishan Viramgama

