Lorsque j'essaie de run
mon Android sur un appareil Android, la console Gradle signale l'erreur suivante:
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.Android.build.api.transform.TransformException: Java.util.Zip.ZipException: duplicate entry: com/loopj/Android/http/AsyncHttpClient$1.class
Lorsque je recherche la classe "AsyncHttpClient", je constate qu'elle se trouve effectivement dans deux emplacements distincts:
/Users/Afflatus/.gradle/caches/modules-2/files-2.1/com.loopj.Android/android-async-http/1.4.9/5d171c3cd5343e5997f974561abed21442273fd1/Android-async-http-1.4.9-sources.jar!/com/loopj/Android/http/AsyncHttpClient.Java
/Users/Afflatus/.ideaLibSources/Android-async-http-1.4.9-sources.jar!/com/loopj/Android/http/AsyncHttpClient.Java
Le premier chemin semble suggérer qu'il s'agit d'un fichier "cache" ... j'ai donc essayé invalidating & restarting my cache
, mais les deux fichiers sont toujours là après la reconstruction du gradle et j'essaie de run
l'application. J'ai lu dans un autre posts qu'il peut être résolu en supprimant l'un des fichiers ... Je suis donc allé à l'emplacement du cache et j'ai supprimé tous les fichiers trouvés dans le dossier "1.4.9". .. malheureusement après la réouverture Android Studio, un nouveau fichier cache est créé et j'obtiens la même erreur.
D'autres articles ( ici , ici , ici et ici ) suggèrent si j'ajoute "./gradlew clean" dans le répertoire racine, il reconstruirait à nouveau le gradle juste pour la course (pour autant que je sache). J'ai donc essayé de faire ça aussi:
Ce qui faisait que le dossier de mon application ressemblait à ceci:
Mais malheureusement, cela n'a pas aidé les choses, je reçois toujours la même erreur. Qu'est-ce que je fais mal? Que dois-je faire?
c'est parce que vous avez ajouté deux fois la bibliothèque dans le dossier libs
, cela peut parfois arriver lorsque vous avez plusieurs versions de la même bibliothèque dans le dossier libs
. Vérifiez-le et supprimez tout fichier jar en double.
et la deuxième option pourrait être que vous avez également ajouté la dépendance dans gradle.build
et ont également jar dans le dossier libs
.
Vérifiez donc les deux emplacements et supprimez les entrées en double et nettoyez et générez à nouveau APK
.
J'espère que ça aide
Dans mon cas, j'utilise sensorocloud.jar
Et le compile 'com.loopj.Android:android-async-http:1.4.9'
Dans mon gradle, ce qui a causé la même erreur que la vôtre. Parce que le SDK cloud sensoro a utilisé le async-http
De loopj.
J'ai réussi à le résoudre en supprimant manuellement les fichiers .class
En double dans le fichier jar. (c'est à dire.
com.loopj.Android
.class
)(PS, j'ai essayé de chercher sur le Web pour voir si je pouvais exclure certaines classes d'un pot en gradle, mais sans succès, par exemple j'ai référencé this SO post )
Supprimez les fichiers avec des extensions jar en double dans le dossier libs
. Cependant, s'il n'y a pas de fichiers en double et qu'il y a toujours un "Duplicate classes"
error, recherchez le nom dans le reste de la clause "Duplicate classes ...." dans la section error. Par exemple, "duplicated classes 'dagger' bla bla"
. Supprimez le fichier nommé 'dagger'
du dossier libs
. (Attention à ne pas le supprimer avec shift.)
Parfois, l'exception de classes en double signifie que l'une de vos dépendances utilise implicitement la version plus ancienne ou plus récente (avec +) d'une bibliothèque que vous utilisez également dans votre projet,
Pour résoudre ce problème, vous pouvez ajouter un tel bloc de code (mettez la version de votre bibliothèque après 'force'
) à ton build.gradle
fichier (Module: app):
configurations {
all {
resolutionStrategy {
// do not upgrade above 3.12.0 to support API < 21 while server uses
// COMPATIBLE_TLS, or okhttp3 is used in project
force 'com.squareup.okhttp3:okhttp:3.12.0'
force 'com.squareup.okhttp3:logging-interceptor:3.12.0'
}
}
}
Vous pouvez également exclure un groupe de vos dépendances. Pour une seule dépendance, vous écrivez:
dependencies {
// example
implementation('log4j:log4j:1.2.15') {
exclude group: 'javax.jms', module: 'jms'
}
}
Testé pour fonctionner sur Android Studio avec Gradle Plugin version 3.4.2
et version Gradle 5.4.1
. Les crédits vont à Dimitar Dimitrov et Schalk Cronjé du groupe de discussion Gradle org