如何修复Android构建错误:重复条目android/support/v4/app/NavUtils.class
嘿,这个问题我碰到过好多次了,核心就是重复引入了Android Support V4库导致的Jar合并冲突。咱们一步步来解决:
1. 移除手动导入的support-v4本地Jar包
你现在同时通过本地Jar和其他依赖引入了support-v4,首先要砍掉重复的源头:
- 删除项目里
libs/support-v4-19.0.1.jar这个文件 - 从
dependencies配置里删掉这一行:compile files('libs/support-v4-19.0.1.jar')
本地Jar的依赖方式很难管理版本冲突,现在更推荐用Maven中心的标准依赖。
2. 统一使用Maven依赖的support-v4
在dependencies里添加匹配你项目版本的support-v4依赖,比如如果你的compileSdkVersion是28,就写:
compile 'com.android.support:support-v4:28.0.0'
注意版本号要和你的compileSdkVersion保持一致,避免版本不兼容问题。如果你用的是新版Gradle(3.0+),可以把compile换成implementation,效果是一样的。
3. 排查其他依赖是否偷偷引入了support-v4
有些第三方库会默认依赖support-v4,比如你没写完的com.an...开头的库,或者其他依赖。可以用Gradle命令查看完整的依赖树:
# Mac/Linux ./gradlew app:dependencies # Windows gradlew.bat app:dependencies
在输出里找compile(或implementation)节点下的support-v4,如果发现某个库也引入了它,就给这个依赖加上排除规则,比如:
compile ('com.example.yourlibrary:xxx:1.0.0') { exclude module: 'support-v4' }
另外提醒下:尽量别用+来指定play-services的版本(比如com.google.android.gms:play-services:+),这种方式会自动拉取最新版本,很容易引发兼容性问题,最好指定具体的稳定版本,比如com.google.android.gms:play-services:12.0.1。
4. 清理缓存并重新构建
做完上面的修改后,先清理旧的构建缓存,再重新打包Release版本:
# Mac/Linux ./gradlew clean ./gradlew assembleRelease # Windows gradlew.bat clean gradlew.bat assembleRelease
这样应该就能解决duplicate entry: android/support/v4/app/NavUtils.class的错误了。
内容的提问来源于stack exchange,提问作者steven

