【问题标题】:Android Proguard Duplicate DefinitionAndroid Proguard 重复定义
【发布时间】:2012-02-07 00:11:38
【问题描述】:

我正在尝试将第 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 会抱怨重复定义?

【问题讨论】:

  • 一个清理项目设法为我修复它(在尝试了一堆建议的答案之后)似乎一个旧版本的 lib 被保存在构建文件夹或其他东西中

标签: android proguard


【解决方案1】:

通过将第 3 方库移动到另一个目录(在我的情况下为“lib”)来解决此问题。然后加了

-injars lib/jmdns.jar 

到 proguard.cfg 文件。

如果第 3 方 lbs 包含在“libs”文件夹中,则它们会被处理两次。

【讨论】:

  • 我遇到了同样的错误,并根据你的回答解决了——顺便说一句,我在 -injars 中使用 jars 的完整路径......谢谢你分享你的答案。
  • 或者只是-injars libs
  • 你有两个文件夹'lib'和'libs'吗?你的 gradle 里有 compile fileTree(dir: 'libs', include: ['*.jar']) 吗?
  • 根据 Proguard 故障排除文档:您永远不应该自己明确指定输入 jars(使用 -injars 或 -libraryjars),因为您会得到重复的定义。跨度>
【解决方案2】:

在当前的 progaurd 版本中,不需要指定 injars。它是默认处理的。这可能是由于以下原因 -

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

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

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

解决方案 - 将 gradle 文件编辑为引用库/项目的 gradle 文件之一。请参阅两个项目的类路径相同。

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

这两个问题我都遇到了,改正了,效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2019-01-24
    • 2012-01-14
    • 2012-03-05
    • 2023-03-05
    相关资源
    最近更新 更多