Android Studio编译出现support包duplicate class类重复报错求解决方案
问题根源
冲突是由于项目内不同依赖传递引入了版本不一致的Android Support官方支持包导致的:你显式引入的com.android.support:appcompat-v7:28.0.0会附带高版本的com.android.support:support-compat:28.0.0,而你引入的lifecycle、navigation等arch组件会传递依赖旧版的com.android.support:support-v4:22.2.0,两个包存在完全相同路径的类,编译时就会触发重复类报错。
解决方案
按优先级尝试以下两种方法即可:
方法1:全局强制统一Support包版本(最适合新手)
直接在项目根目录的build.gradle文件中添加全局配置,强制所有依赖的Support包都统一使用28.0.0版本,无需修改单个依赖的配置:
找到根目录build.gradle里的allprojects代码块,添加如下配置:
allprojects { // 原有配置无需修改,新增以下configurations配置 configurations.all { resolutionStrategy { // 强制所有Support相关包统一使用28.0.0版本 force 'com.android.support:support-v4:28.0.0' force 'com.android.support:support-compat:28.0.0' force 'com.android.support:appcompat-v7:28.0.0' force 'com.android.support:design:28.0.0' } } }
配置完成后点击Android Studio右上角的Sync Now同步项目,再重新编译即可解决冲突。
方法2:手动排除冲突的传递依赖
如果方法1不生效,可以在传递了旧版Support包的依赖上手动排除support-v4组件,修改你app模块级build.gradle(就是你贴出dependencies代码的那个文件)的配置如下:
dependencies { implementation 'com.android.support:appcompat-v7:28.0.0' //implementation 'com.android.support:design:28.0.0' implementation 'com.android.support.constraint:constraint-layout:2.0.4' // lifecycle依赖排除旧版support-v4 implementation ('android.arch.lifecycle:livedata:1.1.1') { exclude group: 'com.android.support', module: 'support-v4' } implementation ('android.arch.lifecycle:viewmodel:1.1.1') { exclude group: 'com.android.support', module: 'support-v4' } // navigation依赖排除旧版support-v4 implementation ('android.arch.navigation:navigation-fragment:1.0.0') { exclude group: 'com.android.support', module: 'support-v4' } implementation ('android.arch.navigation:navigation-ui:1.0.0') { exclude group: 'com.android.support', module: 'support-v4' } testImplementation 'junit:junit:4.+' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
同步项目后重新编译即可。
补充建议
Google已停止维护旧版Support包,后续新建项目建议直接使用Jetpack(AndroidX)替代Support包,可从根源避免这类版本冲突问题。
内容的提问来源于stack exchange,提问作者Derop De Rop
相关产品推荐
相关产品推荐

