【问题标题】:Proguard throwing IOException for duplicate zip entry despite only one entry existing尽管只有一个条目存在,但 Proguard 为重复的 zip 条目抛出 IOException
【发布时间】:2016-02-05 23:01:56
【问题描述】:

我在 intellij 中使用 gradle proguard 插件(不适用于 android 项目),将我的 libraryjars 指定为 java home,输入 jars 为 jarname.jar,输出 jars 为 jarname.pro.jar。我有一个用于配置的 proguard.txt 文件,除了 Main 方法 keep 选项之外的所有内容都被排除在外。 Proguard 抛出以下错误:

java.io.IOException: 无法写入 [/Users/user/src/name/build/libs/jarname.pro.jar] (无法读取 [/Users/user/src/name/hci/ build/libs/jarname.jar](重复的 zip 条目 [c/a/a/a.class== jarname.jar:com/google/gson/ExclusionStrategy.class])

根据source from the proguard website,我在 jarname.jar 中有重复的条目。手动检查 jarname.jar 显示没有重复条目。我应该在哪里解决这个问题?

【问题讨论】:

  • 让我把范围缩小一点。除了我对 -libraryjars 和 inputjars 的引用之外,proguard gradle 插件是否接受其他任何输入?
  • 你找到解决办法了吗?我遇到了同样的问题。

标签: java intellij-idea proguard


【解决方案1】:

查看此解决方案/hack:https://stackoverflow.com/a/39584838/1919549

适应您的错误,将其添加到 build.gradle:

import com.android.build.gradle.internal.pipeline.TransformTask

def deleteDuplicateJniFiles() {
    def files = fileTree("/Users/user/src/name/hci/build/libs/") {
        include "**/jarname.jar"
    }   
    files.each { it.delete() }
}

tasks.withType(TransformTask) { pkgTask ->
    pkgTask.doFirst { deleteDuplicateJniFiles() }
}

请注意,此命令实际上并没有删除这些 jar(您的重复错误意味着它们将被重新添加) - 只有配置/排除块会这样做。我不知道为什么要包含它们,因为在我的项目中,它们在检查 gradle app:dependencies 时也没有被复制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2018-05-08
    • 2018-06-22
    相关资源
    最近更新 更多