Parceler ZipException"重复输入"

时间:2017-06-23 06:21:21

标签: android parcelable parceler

我正在构建一个项目,它有两个类(A和B),它们都继承自BaseClass。 A和B这两个类都有注释@Parceler。当我为OS ver 4.1.2(API 16)的手机构建它时,它给了我这个错误:

Execution failed for task ':app:transformClassesWithJarMergingForDebug'.  
com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry:  
com/example/BaseClass$$PackageHelper.class

如果我为带有Nougat的手机构建它,则没有问题。

我读过有关使用parcelsIndex的内容,但Parceler并不支持版本I使用 - 1.1.8。

是否有针对此问题的修复程序?

2 个答案:

答案 0 :(得分:1)

导致此错误是因为您对同一个库使用了2个依赖项,并且具有不同版本的依赖项。

对于你的情况,我需要更多的数据,但我会举一个例子来解释你的问题:说你的项目使用库x,而库x使用依赖: compile "com.android.support:appcompat-v7:25.3.0"

这就是你的gradle的样子:

apply plugin: 'com.android.application'

android {
    ...
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')

    compile "com.company.library_x:+"
    compile "com.android.support:appcompat-v7:23.4.0"
}

这就是问题所在,因为你使用相同的依赖项library_x并且依赖项中存在冲突,因为你正在导入版本23.4.0并且库正在使用版本{{1} }。在构建项目时,所有依赖项都被采用并“下载”,在这种情况下,您已经下载了同一个库的2个版本,并且您有重复的条目。您没有很多选项,但使用相同版本25.3.0使用,这意味着在您的情况下,使用最新版本构建项目。

Fyi,更多信息:在library_x下,您实际上可以看到导致问题的价值。

答案 1 :(得分:0)

我在不同的模块中使用这些类 - 这似乎导致了它。虽然可能有一些解决方案使用@ParcelClass注释(https://github.com/johncarl81/parceler/issues/225?),但我只是将它们移动到同一个模块,现在它正在建设中。