Я перевожу свой проект Android на Gradle 4.4 и плагин Android Gradle 3.1.2.Он имеет библиотечный модуль, который зависит от библиотеки посылок и определяет его зависимость следующим образом:
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-студии, я вижу Parcels.class в пакете org.parceler.Но, похоже, аналогичный файл также генерируется основным модулем приложения в том же пакете, который вызывает конфликт.