web-dev-qa-db-fra.com

Entrée en double Gradle: Java.util.Zip.ZipException

J'ai intégré le sdk mobile Zendesk via son référentiel maven dans mon projet et il ne serait plus construit. Il y a une sorte de conflit avec la bibliothèque picasso que j'utilise. J'obtiens cette erreur lors de la construction:

Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> Java.util.Zip.ZipException: duplicate entry: com/squareup/picasso/Action$RequestWeakReference.class 

J'ai couru ../gradlew dependencies sur le dossier de l'application et voici ce que j'ai trouvé sous le module zendesk:

\--- com.zendesk:sdk:1.0.0.1
     +--- com.squareup.retrofit:retrofit:1.4.1
     |    \--- com.google.code.gson:gson:2.2.4
     +--- com.squareup.picasso:picasso:2.3.2
     +--- com.Android.support:support-v4:20.0.+ -> 21.0.3 (*)
     \--- com.Android.support:appcompat-v7:20.0.+ -> 21.0.3 (*)

Donc, Zendesk utilise également Picasso mais une version différente de celle que j'ai dans mon projet. J'ai essayé d'exclure Picasso de Zendesk comme ceci:

compile (group: 'com.zendesk', name: 'sdk', version: '1.0.0.1'){
            exclude group: 'com.squareup.picasso'
        }

mais cela provoque des exceptions d'exécution dans d'autres composants de l'application. J'obtiens un NoDefFoundError pour une classe totalement indépendante des bibliothèques.
Quelqu'un sait-il comment contourner ce problème?

17
Sayed Jalil Hassan

Lorsque vous avez ajouté le com.Android.support:multidex dépendance vous avez ajouté des dépendances qui entrent en collision avec d'autres dépendances.

Je l'ai résolu en:
---------------
1. la recherche de la classe, dans votre cas, le "RequestWeakReference.class" (dans AndroidStudio appuyez simplement sur Ctrl + N sous Windows ou CMD-O sur Mac)
2. Voir quel pot le contient - Android Studio l'écrira dans la fenêtre contextuelle.
3. Excluez-le de toutes les versions, par exemple:

Android {
     configurations{
        all*.exclude module: 'servlet-api'
    }
}
27
Tomer