Android构建报lStar资源链接错误 降级core后运行出现类找不到异常
问题根因
- 最初的
android:attr/lStar报错是因为项目依赖的androidx.core系列库自动升级到了1.7.0及以上版本,该版本要求项目的compileSdkVersion>= 31,低于该版本就会出现资源链接失败 - 第一种强制降级core到1.6.0的方案之所以出现运行时类找不到,是因为项目依赖的
androidx.appcompat版本较高,高版本appcompat依赖androidx.core 1.7.0+提供的API(比如报错里的MenuHost类就是core 1.7.0新增的),强制降级core后导致appcompat依赖的API缺失,出现运行时崩溃 - 第二种只声明ext变量的方案没有生效,是因为没有把这个变量用到实际的依赖声明里,也没有做全局版本强制,自然不会生效
可行解决方案
方案一:升级compileSdk版本(推荐)
直接把项目根目录build.gradle或者app模块build.gradle里的compileSdkVersion升级到31或更高版本,同时对应的targetSdkVersion也可以同步升级到和compileSdk一致。
这个方案不需要修改任何依赖的版本号,也不会出现运行时API缺失的问题,是兼容性最好的方案。
方案二:同时强制约束core和appcompat的版本
如果暂时没法升级compileSdk,就把core和appcompat的版本都强制降到适配compileSdk<=30的版本:
在app模块的build.gradle里添加如下配置:
configurations.all { resolutionStrategy { // 强制core系列版本到1.6.0 force "androidx.core:core:1.6.0" force "androidx.core:core-ktx:1.6.0" // 强制appcompat版本到1.4.2,该版本适配core 1.6.0,不会依赖core更高版本的API force "androidx.appcompat:appcompat:1.4.2" } }
添加后同步Gradle,清理项目缓存后重新构建即可,不会再出现构建失败或者运行时类找不到的问题。
额外验证步骤
如果修改后还是有问题,可以执行以下操作清理缓存:
- 点击Android Studio的File -> Invalidate Caches... 勾选清除文件系统缓存和本地历史,然后重启IDE
- 手动删除项目根目录下的.gradle、build文件夹,以及app模块下的build文件夹,再重新构建
内容的提问来源于stack exchange,提问作者charles-lun
相关产品推荐
相关产品推荐

