升级Android Studio并切换SDK至27.1.1后编译报attr/tintMode重复错误
解决appcompat-v7-27.1.1编译报错:duplicate value for resource 'attr/tintMode'
哈哈,这个坑我踩过!升级Android Studio并切换到SDK 27.1.1后出现的tintMode属性重复错误,本质就是同一个属性被定义了两次——要么是你自己的代码里手动定义了,要么是第三方依赖库和appcompat的内置属性撞车了。给你几个靠谱的解决思路:
1. 检查并移除自定义的重复属性
首先打开你项目里的res/values/attrs.xml,搜索tintMode。如果你看到类似这样的自定义属性:
<attr name="tintMode" format="enum"> <enum name="src_over" value="3"/> <!-- 其他枚举值 --> </attr>
直接删掉这段代码!因为appcompat-v7-27.1.1已经内置了这个属性,不需要你再重复定义,留着只会冲突。
2. 排查并修复第三方依赖冲突
如果不是你自己定义的,那大概率是某个第三方依赖库也定义了tintMode,或者依赖了不同版本的support库导致的。
- 第一步:查看依赖树
执行这个命令列出所有依赖的详细信息,找出可能冲突的库:
./gradlew dependencies
仔细看输出里的com.android.support相关依赖,有没有不同版本的appcompat,或者某个第三方库自带了同名属性。
- 第二步:排除冲突依赖
比如发现com.xxx:old-ui-lib:2.0这个库依赖了旧版的appcompat,就在build.gradle里给它排除掉:
dependencies { implementation('com.xxx:old-ui-lib:2.0') { exclude group: 'com.android.support', module: 'appcompat-v7' } }
- 第三步:强制统一support库版本
为了从根源避免这类版本冲突,可以在项目根目录的build.gradle里添加强制统一版本的配置:
allprojects { repositories { // 你的仓库配置(比如google()、jcenter()) } configurations.all { resolutionStrategy { force 'com.android.support:appcompat-v7:27.1.1' force 'com.android.support:support-v4:27.1.1' // 其他用到的support库也统一成27.1.1版本 } } }
3. 清理Gradle缓存后重新编译
有时候缓存文件损坏也会导致奇怪的冲突,执行以下命令彻底清理缓存:
./gradlew clean ./gradlew build --refresh-dependencies
然后重新编译项目,大概率能解决问题。
内容的提问来源于stack exchange,提问作者Dale.Che
相关产品推荐
相关产品推荐

