Android:升级v7支持库27.1.0遇ListAdapter重复定义编译错误
我之前升级到27.1.0版本时也碰到过一模一样的问题!这个错误本质是类重复定义——android.support.v7.recyclerview.extensions.ListAdapter这个类在多个dex包中重复出现,导致D8合并时触发报错。
问题根源
Google在27.1.0版本的Support Library里做了模块调整:把原本放在单独recyclerview-extensions模块中的ListAdapter,合并到了recyclerview-v7核心库中。如果你的项目存在以下情况,就会触发冲突:
- 手动依赖了旧版本的
recyclerview-extensions - 某个第三方库依赖了旧版本的
recyclerview-v7或recyclerview-extensions
具体解决步骤
第一步:定位重复依赖来源
先执行gradle命令查看项目完整依赖树,找出重复引入ListAdapter的模块:# Mac/Linux环境 ./gradlew app:dependencies # Windows环境 gradlew app:dependencies在输出内容里搜索
recyclerview-extensions或直接搜索ListAdapter,就能明确是哪个依赖带来了重复类。第二步:排除重复依赖
如果是第三方库带进来的旧版本依赖,就在对应的依赖声明里排除冲突模块。示例如下:implementation('com.example.thirdparty:target-library:1.0.0') { exclude group: 'com.android.support', module: 'recyclerview-v7' exclude group: 'com.android.support', module: 'recyclerview-extensions' }另外,如果你之前手动添加过
recyclerview-extensions的依赖,直接删除即可——27.1.0版本的recyclerview-v7已经包含这个类了。第三步:统一Support库版本
确保项目中所有com.android.support开头的依赖都使用同一个版本(27.1.0),避免版本不一致导致的隐性冲突。可以在根目录build.gradle中定义统一版本变量:ext { supportLibVersion = '27.1.0' }之后所有Support库依赖都引用这个变量:
implementation "com.android.support:appcompat-v7:$supportLibVersion" implementation "com.android.support:recyclerview-v7:$supportLibVersion"第四步:清理缓存重新构建
最后执行清理命令清除旧构建缓存:# Mac/Linux环境 ./gradlew clean # Windows环境 gradlew clean重新编译项目后,这个Dex合并错误应该就能解决了。
内容的提问来源于stack exchange,提问作者TonyR

