编译时出现Program type already present: org.simpleframework.xml.Attribute错误求助
解决Android编译错误:Program type already present: org.simpleframework.xml.Attribute
这个错误我之前也碰到过,本质是项目中重复引入了org.simpleframework.xml相关的类,导致编译时字节码冲突。结合你的依赖配置来看,大概率是主项目和:CouponingModule模块同时依赖了Simple XML库,或者某个第三方依赖间接引入了它。下面是具体的排查和解决步骤:
1. 先找出重复依赖的来源
首先执行Gradle命令查看完整的依赖树,定位重复引入的位置:
# Mac/Linux ./gradlew app:dependencies # Windows gradlew.bat app:dependencies
在输出结果中搜索org.simpleframework,你会看到除了你自己声明的simple-xml:2.7.1之外,还有没有其他模块(比如:CouponingModule)或者第三方依赖引入的同库不同版本/相同版本的条目。
2. 根据排查结果解决冲突
情况一::CouponingModule模块也依赖了Simple XML
如果是模块里也引入了这个库,你可以在主项目的模块依赖中排除掉模块带来的Simple XML,确保只使用主项目中统一的版本:
implementation project(':CouponingModule') { exclude group: 'org.simpleframework', module: 'simple-xml' }
或者更规范的方式:在:CouponingModule的build.gradle中,使用和主项目一致的Simple XML依赖配置(同样排除stax和xpp3),保持版本统一。
情况二:第三方依赖间接引入了Simple XML
如果是某个第三方依赖(比如你配置中的Fresco、Play Services等)间接引入了该库,在对应的依赖项中添加排除规则即可,就像你排除stax-api那样:
implementation '第三方依赖的坐标' { exclude group: 'org.simpleframework', module: 'simple-xml' }
3. 额外检查项
- 确认你
libs目录下的jar包(activation.jar、additionnal.jar、mail.jar)没有包含Simple XML相关的类,避免遗漏的本地jar冲突。 - 尽量统一项目中所有依赖的版本,减少版本不一致带来的编译冲突。
内容的提问来源于stack exchange,提问作者Michael Bodnar
相关产品推荐
相关产品推荐

