问题描述
工程代码没有做修改,编译总是提示attr/IStar not found,查代码无相关修改,clean project都无效。
问题如下所示:
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> Android resource linking failed
/xxxxx/.gradle/caches/transforms-2/files-2.1/63e2a511377effd1caf795d92b1d98ec/core-1.7.0-rc01/res/values/values.xml:105:5-114:25: AAPT: error: resource android:attr/lStar not found.
问题分析
通过clean project等操作无效,分析问题错误,core-1.7.0-rc01,查依赖包core,发现core-ktx依赖包存在动态版本的情况,即:androidx.core:core-ktx:+,而原来指定版本的是依赖1.3.2版本,所以找了问题所在,高版本资源冲突问题,调整版本即可。
解决方案
通过分析知道了是版本冲突的问题,有两种解决方案:
- 将动态版本替换为指定版本,即:
api 'androidx.core:core-ktx:+'
//替换为
api 'androidx.core:core-ktx:1.3.2'
- 通过强制指定版本来进行解决,即在app的build.gradle中指定版本:
force 'androidx.core:core-ktx:1.3.2'
问题思考
在开发中尽量避免使用动态版本,在编译时,使用动态版本会拉取最新的版本,容易产生不可预知的问题,不仅为开发及维护排查问题增加了成本,而且容易造成将一些在编译期不可发现的问题带到线上,造成一定的损失。
在开发中指定引入包的版本,或者为了版本的可控,在App侧强制指定到某个引入的版本。