解决 ProGuard 中的“库类的重复定义”

Posted

技术标签:

【中文标题】解决 ProGuard 中的“库类的重复定义”【英文标题】:Resolving a "duplicate definition of library class" in ProGuard 【发布时间】:2012-01-14 22:09:04 【问题描述】:

我有一个包含 Xerces 库的 Java 项目。

当我使用 Proguard 处理项目时,我收到警告:

Note: duplicate definition of library class [org.w3c.dom.html.HTMLDOMImplementation]

我在 Xerces 中看到这个类存在,并且在 JDK 1.6 的 rt.jar 中存在同一个类。

ProGuard 创建的 jar 文件无法启动(错误:“发生 Java 异常”)。 我怎么解决这个问题?谢谢!


(注意:我使用 Netbeans)

【问题讨论】:

【参考方案1】:

1) 您应该从其中一个库中删除该类(不建议这样做,因为它可能会破坏其他类)

2) 找一个没有这个类的罐子。例如您在应用程序中使用的类可能在许多 jar 中可用。因此,请获取不存在此冲突类但存在您想要的其他类的 jar(这可能需要一些时间)

3)(最好)忽略错误。我不认为它应该给任何问题。根据类路径中首先出现的 jar,将选择该类。

【讨论】:

不要不要忽略这些错误。它们可能在运行时导致 ClassCastExceptions。最好的方法是#1 - 从库中删除该类,因为它是重复的。

以上是关于解决 ProGuard 中的“库类的重复定义”的主要内容,如果未能解决你的问题,请参考以下文章

Android 中的 ProGuard 不起作用。(不混淆)

构建 Gradle + Proguard + APKLib

使用 ProGuard 删除日志不会删除正在记录的字符串 [重复]

Proguard 解析异常错误。如何解决

关于 ProGuard 的一些踩坑总结

关于 ProGuard 的一些踩坑总结