android - java.util.zip.ZipException : duplicate entry Foo. 类

标签 android gradle

在构建项目时遇到了这个众所周知的异常。

我的问题是:
我怎样才能找到Foo.class 的重复位置(在哪些 jar 、库中)是?

我过去曾经解决过这样的问题,通常原因是在不同版本的Android库中(支持,播放等......)。我的项目有10个模块,所以每次需要比较10个build.gradle中的所有依赖.

特别是,现在是 javax/annotation/CheckForNull.class .我卡住了,找不到任何重复的依赖项。
所以我只需要一个简单的方法来知道 - X 包含哪个库 Foo.class并且另一个库 Y 包含 Foo.class .是否可以?

最佳答案

将此添加到您的 build.gradle

task findDuplicates  {
    doLast {
        def pathMap = [:]
        def jars = configurations.runtime.asFileTree.matching {
            include '*.jar'
        }
        jars.visit { FileVisitDetails fvd ->
            FileTree classTree = zipTree(fvd.file).matching {
                include '**/*.class'
            }
            classTree.visit { FileVisitDetails fvd2 ->
                String path = fvd2.relativePath.pathString
                List<String> jarList = pathMap[path]
                if (!jarList) {
                    jarList = []
                    pathMap[path] = jarList
                }
                jarList << fvd.file.name
            }
        }
        pathMap.each { path, jarList ->
            if (jarList.size() > 1) {
                println "Duplicate $path at $jarList" 
            }
        }
    }
}

然后调用gradle findDuplicates从命令行

关于android - java.util.zip.ZipException : duplicate entry Foo. 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41775653/

相关文章:

android-studio - Android Studio 无法同步和构建新旧 kotlin 项目

android - native react - 获取构建工具文件时出错

java - 使用 Robotium 进行生命周期测试 : Killing and Restarting Activity

android - 为同一提供者使用多个 LocationManager requestLocationUpdates(...)

java - React-native 构建错误 Android - java.lang.UnsupportedClassVersionError : com/android/build/gradle/AppPlugin : Unsupported major. 次要版本 52.0

java - 带有简单数据库的Android应用程序架构

android - NavigationView 与 DrawerLayout setCheckedItem 不工作

gradle - 在配置阶段未执行Gradle任务(类型:Exec)

android - gradle 执行过程错误流

mongodb - 使用Gradle为Spring Data和MongoDB配置QueryDSL