我正在将我的 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。但似乎导致冲突的同一包下的主应用程序模块也生成了类似的文件。