【问题标题】:Duplicate zip entry [okhttp-2.4.0.jar:com/squareup/okhttp/Address.class]重复的 zip 条目 [okhttp-2.4.0.jar:com/squareup/okhttp/Address.class]
【发布时间】:2015-12-01 09:11:32
【问题描述】:

我有 okhttp 作为多个项目的一部分的 android 多项目设置

在项目A中,okhttp包含在源代码中。 在项目 B 中,okhttp 带有部分库依赖项。

当我构建时,我收到以下错误。

任务“:Events-Android:events:proguardFlavDebug”执行失败。 java.io.IOException:无法写入 [/Users/gatorboy/events/Events-Android/events/build/intermediates/classes-proguard/dfmobile/debug/classes.jar](无法读取 [/Users/gatorboy /.gradle/caches/modules-2/files-2.1/com.squareup.okhttp/okhttp/2.4.0/40340c0748190fe897baf7bffbc1b282734294e5/okhttp-2.4.0.jar(;;;;;;!META-INF/MANIFEST.MF )] (重复的 zip 条目 [okhttp-2.4.0.jar:com/squareup/okhttp/Address.class]))

我无法从项目 B 中排除 okhttp,因为它与项目 A 中的 okhttp 源代码不同。有没有其他方法可以解决这个问题?

stackoverflow上有类似的帖子,但我找不到解决方案。

【问题讨论】:

  • gradle androidDependencies 的输出是什么?

标签: android gradle android-gradle-plugin build.gradle


【解决方案1】:

我遇到了同样的错误。只需将这些行添加到 build.gradle 即可!

configurations{
    all*.exclude module: 'okhttp'
    all*.exclude module: 'okio'
}

【讨论】:

  • 谢谢。 ksoap2 和改造都有这个问题。有了你的解决方案,一切都很好。
【解决方案2】:

您不能在同一个应用程序中拥有同一个库的两个版本。如果您绝对需要同一个库的两个版本,那么您需要使用jarjar 工具重新打包其中一个版本。

否则,您永远不会将同一个库的两个不同版本放入同一个应用程序中。

最好的解决方法是对两个包使用相同的版本...如果这不是一个选项,那么 jarjar 重新打包是唯一的解决方案,但这不是一个好的解决方案,因为如果您需要一个库,则必须再次手动重新打包以后有不同的版本。

JarJar 参考:https://code.google.com/p/jarjar/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    相关资源
    最近更新 更多