构建APK遇重复类错误,Gradle用.+依赖如何修复?
这个问题我之前帮不少开发者排查过,核心根源就是你项目里用的.+版本号——这种写法会让Gradle自动拉取对应依赖的最新版本,而不同第三方库可能依赖了不同版本的Android Support Design库,最终打包时就会出现重复类的冲突。下面是具体的修复步骤:
1. 定位重复依赖的来源
首先你得搞清楚到底是哪些依赖引入了重复的com.android.support:design库。在Android Studio的Terminal里执行以下命令:
# Mac/Linux ./gradlew app:dependencies # Windows gradlew app:dependencies
执行完后,在输出结果里搜索com.android.support:design,你会看到多个条目,有些是你直接声明的,有些是第三方依赖间接引入的,重点看它们的版本号是不是不一致。
2. 统一所有Support库的版本
.+版本号是罪魁祸首,所以第一步要把所有Support相关的依赖都改成固定版本号。比如你可以选择一个稳定的版本(比如28.0.0,根据你的项目最低SDK版本调整),然后替换所有.+的写法:
// 原来的写法 compile 'com.android.support:design:+' compile 'com.android.support:appcompat-v7:+' // 改成固定版本 compile 'com.android.support:design:28.0.0' compile 'com.android.support:appcompat-v7:28.0.0'
更高效的方式是在根目录的build.gradle里定义一个全局变量,统一管理版本:
// 根build.gradle ext { supportLibraryVersion = '28.0.0' } // 模块build.gradle里引用 compile "com.android.support:design:$supportLibraryVersion" compile "com.android.support:appcompat-v7:$supportLibraryVersion"
这样后续修改版本只需要改一处,避免遗漏。
3. 排除第三方依赖中的重复Design库
如果某些第三方库本身已经包含了com.android.support:design依赖,你需要在声明这些依赖时排除掉它们的Design库引用,避免重复:
compile ('com.some.thirdparty:library:1.2.3') { exclude group: 'com.android.support', module: 'design' }
这里的com.some.thirdparty:library:1.2.3替换成你项目中实际的第三方依赖坐标。
4. 清理缓存并重新构建
最后一步,清除旧的构建缓存,避免残留的重复类文件影响构建:
# Mac/Linux ./gradlew clean # Windows gradlew clean
执行完clean后,再重新点击Android Studio的"Build"->"Rebuild Project",问题应该就能解决了。
额外提醒
以后尽量避免使用.+版本号,它会导致构建不稳定,除了版本冲突,还可能引入不兼容的API变更。所有依赖都使用固定版本号,能大幅减少这类构建问题。
内容的提问来源于stack exchange,提问作者G.Lunn

