我正在尝试将第三方库(JmDNS)添加到我的Android项目中.
我在基础项目目录下创建了一个文件夹'libs',并将jar文件放在目录中.
当我尝试使用Ant(ant release)构建项目时,我收到了一个'重复定义'的注意事项,看起来是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.
Run Code Online (Sandbox Code Playgroud)
构建也失败,出现以下错误:
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]))
Run Code Online (Sandbox Code Playgroud)
我已经确保jar文件只包含一次,并且没有其他方法可以在项目的任何位置包含重复的源文件.
为什么Proguard会抱怨重复的定义呢?
Ste*_*eve 12
通过将第三方库移动到另一个目录(在我的情况下为'lib')来解决此问题.然后补充说
-injars lib/jmdns.jar
Run Code Online (Sandbox Code Playgroud)
到proguard.cfg文件.
如果第三方lbs包含在'libs'文件夹中,则它们将被处理两次.