【问题标题】:Parceler ZipException "duplicate entry"Parceler ZipException“重复条目”
【发布时间】:2026-02-03 23:40:01
【问题描述】:

我正在构建一个项目,它有两个类(A 和 B),它们都继承自 BaseClass。 A 和 B 两个类都有注释 @Parceler。当我为操作系统版本为 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 不支持我使用的版本 - 1.1.8。

有解决这个问题的办法吗?

【问题讨论】:

  • 如果可能,添加有问题的代码。
  • @PravinDivraniya,我不确定是什么代码造成了问题。问题似乎更像是让两个 Parcellable 类继承自一个通用 Parcellable 类。

标签: android parcelable parceler


【解决方案1】:

这个错误是因为你对同一个库使用了两个依赖项,但依赖项的版本不同。

对于您的情况,我需要更多数据,但我将举一个似乎可以解释您的问题的示例:假设您的项目使用库 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,而库正在使用版本25.3.0。当你构建一个项目时,所有的依赖项都会被获取并“下载”,在这种情况下,你已经下载了同一个库的 2 个版本并且你有重复的条目。您没有很多选择,但要使用 library_x 使用的相同版本,这意味着在您的情况下,使用最新版本构建您的项目。

仅供参考,更多信息:在build->intermediates->exploded-aar->appcompat-v7->25.3.0->...class_of_the_error.class 下,您实际上可以看到导致问题的值。

【讨论】:

  • 如果是这种情况,我会看到*.com/questions/42374151/… 中给出的错误,但我没有。此外,由于我自己的课程而不是图书馆的课程,会出现此问题。这也仅在发布版本中。无论如何,它看起来是由于在另一个模块中引用了 Parcellable 类 - 我刚刚将这些类移动到同一个模块。不过感谢您的帮助。
【解决方案2】:

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

【讨论】: