虽然只存在一个条目,但Proguard为重复的zip条目抛出IOException

use*_*116 6 java intellij-idea proguard

我正在使用intellij中的gradle proguard插件(不是用于android项目),将我的libraryjars指定为java home,将jars输入为jarname.jar,并将jars输出为jarname.pro.jar.我有一个proguard.txt文件用于配置,除了Main方法保留选项之外的所有内容.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]))

根据proguard网站的这个来源,我在jarname.jar中有重复的条目.手动检查jarname.jar显示没有重复的条目.我应该在哪里解决这个问题?

小智 0

查看此解决方案/黑客:/sf/answers/2770938691/

根据您的错误进行调整,将其添加到 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() }
}
Run Code Online (Sandbox Code Playgroud)

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