我正在尝试将第 3 方库 (JmDNS) 添加到我的 Android 项目中。
我在基础项目目录下创建了一个文件夹“libs”,并将 jar 文件放到该目录中。
当我尝试使用 Ant(ant 版本)构建他的项目时,我收到一个“重复定义”通知,指出 JmDNS jar 文件中似乎是每个类。
....
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Canceler]
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.DNSStateTask]
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Prober]
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.Renewer]
[proguard] Note: duplicate definition of library class [javax.jmdns.impl.tasks.state.package-info]
[proguard] Note: duplicate definition of library class [javax.jmdns.package-info]
[proguard] Note: there were 357 duplicate class definitions.
构建也失败并出现以下错误:
BUILD FAILED
/path/Tools/ant-android-scala/build-scala.xml:183: Can't write [/path/bin/projectname-debug-shrinked.jar] (Can't read [/path/projectname/libs/jmdns.jar(;;;;!META-INF/MANIFEST.MF,!library.properties)] (Duplicate zip entry [jmdns.jar:javax/jmdns/JmDNS$Delegate.class]))
我已确保只包含一次 jar 文件,并且没有其他方法可以在项目的任何位置包含重复的源文件。
为什么 Proguard 会提示重复的定义?
最佳答案
通过将第 3 方库移动到另一个目录(在我的例子中为“lib”)来修复此问题。然后添加
-injars lib/jmdns.jar
到 proguard.cfg 文件。
如果第 3 方 lbs 包含在“libs”文件夹中,那么它们将被处理两次。
关于Android Proguard 重复定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8805704/