2012-01-10 51 views
10

我试图添加第三方库(JmDNS)到我的Android项目。Android Proguard重复定义

我在基础项目目录下创建了一个文件夹'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. 

构建也失败,出现以下错误:

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会抱怨重复的定义?

+0

一个干净的项目设法修复它(在尝试了一堆建议的答案后)似乎是一个陈旧的版本的lib被保存在生成​​文件夹或东西 – Fonix 2016-01-04 03:19:16

回答

12

通过移动第三方库到另一个目录来解决这个问题,在我的例子'lib'中。然后将

-injars lib/jmdns.jar 

添加到proguard.cfg文件中。

如果第三方lbs包含在'libs'文件夹中,那么它们将被处理两次。

+0

我遇到了同样的错误,并解决它根据你的答案 - 顺便说一句,我使用完整路径的罐子在线 - 进入... 谢谢你分享你的答案。 – 2012-04-26 04:45:18

+5

或者只是'-injars libs' – shkschneider 2013-12-20 09:54:53

+0

你有两个文件夹'lib'和'libs'吗?你有没有在你的gradle中编译fileTree(dir:'libs',include:['* .jar'])'? – NickUnuchek 2016-02-25 15:19:51

1

在当前progaurd版本中没有必要指定伤害。这是默认处理的。这可能是由于以下原因 -

1)在一些引用库中复制jar文件。

解决方案 - 从应用程序中删除它,并让它成为参考图书馆

2)可能是由于你的应用程序文件的gradle和引用的库文件的gradle之间的gradle不同版本。让它一样。

解决方案 - 将gradle文件编辑到其中一个引用的库/ Project的gradle文件。看到两个项目的类路径是相同的。

dependencies { classpath 'com.android.tools.build:gradle:1.3.0' }

我有这两个问题,纠正它和它的工作。