Android Proguard重复定义

Ste*_*eve 10 android proguard

我正在尝试将第三方库(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'文件夹中,则它们将被处理两次.

  • 或者只是`-injars libs` (5认同)