【问题标题】:Migrating to Gradle 3.0.0: Error - D8: Program type already present迁移到 Gradle 3.0.0:错误 - D8:程序类型已存在
【发布时间】:2018-10-31 07:59:45
【问题描述】:

我正在将我的 Android 项目迁移到 Gradle 4.4 和 Android Gradle 插件 3.1.2。 它有一个依赖于 parceler 库的库模块,它的依赖定义如下:

库模块的build.gradle:

...
// parceler for serialization (https://github.com/johncarl81/parceler)
implementation "org.parceler:parceler-api:1.0.4"
annotationProcessor "org.parceler:parceler:1.0.4"
...

这似乎编译得很好并生成了我的 aar 文件。

此外,我的主应用程序模块还直接依赖于 parceler 模块,并在其 build.gradle 中包含上述行作为依赖项,以及上述 aar 文件。

主应用模块的build.gradle:

...
api(group: 'com.example.mylibrary', name: 'mylibrary', version: "1.0.7", ext: 'aar') {
    transitive = true;
    changing = true
}
// parceler for serialization (https://github.com/johncarl81/parceler)
implementation "org.parceler:parceler-api:1.0.4"
annotationProcessor "org.parceler:parceler:1.0.4"
...

在我尝试生成我的 APK 之前一切正常,但失败并出现以下错误。

D8: Program type already present: org.parceler.Parceler$$Parcels$1
Task :MPCApp:transformDexArchiveWithDexMergerForRelease FAILED

当我在 Android Studio 中展开我的库项目时,我在 org.parceler 包下看到 Parcels.class。但似乎导致冲突的同一包下的主应用程序模块也生成了类似的文件。

【问题讨论】:

  • 您是否尝试过将 parceler 传递设置到您的库模块中并从主应用程序中删除依赖项?

标签: android android-gradle-plugin build.gradle parceler


【解决方案1】:

升级到最新版本(当前为 1.1.10) - 我们摆脱了 Parcels 生成的类。

【讨论】:

    猜你喜欢
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2019-07-13
    • 2019-08-30
    相关资源
    最近更新 更多