You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至Gradle 4.4与AGP 3.1.2时遇D8重复类型错误求助

解决Gradle 4.4/AGP 3.1.2下Parceler依赖冲突导致的Dex合并错误

这个问题的核心是两个模块都生成了相同的Parceler辅助类,导致Dex合并时出现重复类型错误。下面给你两种针对性的解决方案,你可以根据项目情况选择:

方案一:主应用无自定义Parceler序列化类时

如果你的主应用模块没有自己的类需要用Parceler进行序列化,完全依赖库模块的序列化逻辑,那直接移除主应用build.gradle里的Parceler相关依赖即可:

// 删掉主应用里这两行
// implementation "org.parceler:parceler-api:1.0.4"
// annotationProcessor "org.parceler:parceler:1.0.4"

因为你已经给aar依赖设置了transitive=true,库模块的parceler-api会自动传递到主应用,而主应用不需要运行Parceler的注解处理器,也就不会重复生成org.parceler.Parceler$$Parcels$1这类类了。

方案二:主应用有自定义Parceler序列化类时

如果主应用自己也有类需要用Parceler注解,那需要调整依赖配置避免重复生成:

  1. 修改库模块的依赖:把parceler-api的implementation改成api,这样主应用可以继承这个依赖,不需要重复引入:
// 库模块build.gradle
api "org.parceler:parceler-api:1.0.4" // 替换原来的implementation
annotationProcessor "org.parceler:parceler:1.0.4"
  1. 修改主应用的依赖:只保留注解处理器依赖,移除parceler-api的依赖(因为已经通过库模块传递过来了):
// 主应用build.gradle
api(group: 'com.example.mylibrary', name: 'mylibrary', version: "1.0.7", ext: 'aar') {
    transitive = true; changing = true
}
// 只保留这一行,删掉implementation那行
annotationProcessor "org.parceler:parceler:1.0.4"

这样调整后,库模块和主应用各自运行注解处理器生成自己模块所需的辅助类,但parceler-api只会被引入一次,而且不会出现重复的Parceler$$Parcels$1类冲突了。

另外要注意:确保库模块和主应用使用的Parceler版本完全一致,版本不一致也可能引发类似的兼容性问题。

内容的提问来源于stack exchange,提问作者nayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:26:22