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?
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'
}
}