Duplicate zip entry [classes.jar: android/support/design/widget/CoordinatorLayout $ Behavior.class]

У меня есть следующая зависимость и получение дубликата записи CoordinatorLayout$Behavior. Я искал так больше, но не нашел никакого решения.

я осознаю

Caused by: java.io.IOException: Duplicate zip entry [classes.jar:android/support/design/widget/CoordinatorLayout$Behavior.class]
at proguard.io.JarWriter.getOutputStream(JarWriter.java:138)
at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:106)
at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:106)
at proguard.io.FilteredDataEntryWriter.getOutputStream(FilteredDataEntryWriter.java:92)
at proguard.io.ClassRewriter.read(ClassRewriter.java:68)
at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87)
at proguard.io.JarReader.read(JarReader.java:65)
at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65)
at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53)
at proguard.InputReader.readInput(InputReader.java:184)
... 50 more

где входит основной пользовательский интерфейс? Я думаю, что это создает проблемы. Кто-нибудь знает, где мне нужно исключить один из этих lib?

Я исследовал всю свою либу и имею следующую сцену.

enter image description here

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
//    compile('com.mikepenz:materialdrawer:[email protected]') {
//        transitive = true
//    }
compile 'com.android.support:multidex:1.0.2'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
compile 'com.android.support:appcompat-v7:27.0.0'
compile 'com.android.support:support-v4:27.0.0'
compile 'com.android.support:recyclerview-v7:27.0.0'
compile 'com.android.support:design:27.0.0'
compile 'com.android.support:cardview-v7:27.0.0'
compile 'com.google.android.gms:play-services-gcm:11.8.0'
compile 'com.google.android.gms:play-services-location:11.8.0'
compile 'com.google.android.gms:play-services-auth:11.8.0'
compile 'com.pnikosis:materialish-progress:1.7'
compile 'de.hdodenhof:circleimageview:2.2.0'
compile 'com.github.rey5137:material:1.2.4'
compile 'org.apache.commons:commons-lang3:3.6'
compile 'com.afollestad.material-dialogs:core:0.9.5.0'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.loopj.android:android-async-http:1.4.9'
compile 'fr.avianey.com.viewpagerindicator:library:[email protected]'
compile 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1'
compile 'com.github.travijuu:numberpicker:1.0.7'
compile 'com.github.carlosmuvi:SegmentedProgressBar:0.6.0'
compile 'com.nex3z:notification-badge:0.3.0'
compile 'com.bogdwellers:pinchtozoom:0.1'
compile 'com.theartofdev.edmodo:android-image-cropper:2.6.0'
compile 'com.aurelhubert:ahbottomnavigation:2.1.0'
testCompile 'junit:junit:4.12'
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile files('libs/PGSDK_V2.1.jar')
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
compile 'com.race604.waveloading:library:1.1.1'
compile 'com.karumi:dexter:4.2.0'
compile 'com.msg91.sendotp.library:library:3.1'
}

Ответ 1

Я просто сделал это как. Это работает сейчас

Решение 1

compile 'com.android.support:appcompat-v7:27.1.0'
compile 'com.android.support:support-v4:27.1.0'
compile 'com.android.support:recyclerview-v7:27.1.0'
compile 'com.android.support:design:27.1.0'
compile 'com.android.support:cardview-v7:27.1.0'

Решение 2 (НОВОЕ)

Перенесите свой код в AndroidX

enter image description here

Ответ 2

Помимо использования Project view → External Libraries, я использую команду gradle для вывода зависимостей в txt файл для поиска. Используйте ./gradlew На Mac и gradlew.bat в окне.

$ ./gradlew -q :app:dependencies > dependencies.txt

В dependencies.txt используйте "Найти" и введите "дизайн", например, и посмотрите на все выделенные библиотеки и их номер версии. Из некоторых сообщений SO они предлагают исключить дублированные зависимости. Если зависимость включена в другую (например, com.android.support:cardview-v7 включен com.firebaseui:firebase-ui-auth), мы можем опустить эту зависимость из приложения /build.gradle.

Я исправил свой проект, удалив эти зависимости из моего градиента:

implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:support-vector-drawable:27.1.0'
implementation 'com.android.support:cardview-v7:27.1.0'

Я сохраняю это (и обновляюсь с 27.0.2 до 27.1.0):

implementation 'com.android.support:design:27.1.0'

Добавить исключение для следующих зависимостей:

implementation 'com.firebaseui:firebase-ui-auth:3.1.2', {
    exclude group: 'android.arch.lifecycle', module: 'extensions'
    exclude group: 'com.android.support', module: 'design'
}
implementation 'com.romandanylyk:pageindicatorview:1.0.0', {
    exclude group: 'com.android.support', module: 'support-core-ui'
}

Я попал в проблему жизненного цикла после добавления/удаления зависимостей. Другая публикация SO предполагает, что были включены две разные версии библиотеки. Итак, я обновил выходной файл на шаге 1 и проверил:

+--- 'com.google.firebase:firebase-core:11.8.0'
|    +--- 'android.arch.lifecycle:runtime:1.1.0' 

+--- 'com.firebaseui:firebase-ui-auth:3.1.2'
|    +--- 'android.arch.lifecycle:extensions:1.0.0'

android.arch.lifecycle:extensions которые решают проблему компиляции.

Ответ 3

Запустите это, чтобы просмотреть зависимости приложения

gradlew -q :app:dependencies > dependencies.txt

Он выведет большое дерево, где:

  • (*) используется, чтобы указать, что конкретная зависимость описана где-то еще в дереве
  • -> (стрелка) используется для указания зависимости, которая побеждает в конфликте версий. По умолчанию Gradle выбирает самую новую версию.

Выход:

+--- com.android.support:design:26.1.0
|    +--- com.android.support:support-v4:26.1.0 (*)
|    +--- com.android.support:appcompat-v7:26.1.0 -> 27.1.1 (*)
|    +--- com.android.support:recyclerview-v7:26.1.0 (*)
|    \--- com.android.support:transition:26.1.0
|         +--- com.android.support:support-annotations:26.1.0 -> 27.1.1
|         \--- com.android.support:support-v4:26.1.0 (*)

В моем случае я обнаружил, что com.android.support:design:26.1.0 от com.android.support:appcompat-v7:26.1.0 → 27.1.1 (*), который разрешил 27.1.1 вместо 26.1.0

Решение Принудительно установите версию 26.1.0, объявив compile ("com.android.support:appcompat-v7:26.1.0") { force = true } gradle compile ("com.android.support:appcompat-v7:26.1.0") { force = true }

Рекомендации

Ответ 4

implementation 'com.android.support:appcompat-v7:27.0.0'
implementation 'com.android.support:support-v4:27.0.0'
implementation 'com.android.support:design:27.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.intuit.sdp:sdp-android:1.0.4'
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.android.support:cardview-v7:27.0.0'
implementation 'com.android.support:recyclerview-v7:27.0.0'