74 votes

De multiples fichiers dex définissent Lorg/apache/cordova/BuildHelper

Je suis dans le pétrin depuis hier. Lors de mon stage, j'ai été confronté à l'erreur de compilation suivante, mais je n'ai pas compris pourquoi :

$ cordova build android

[...]

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lorg/apache/cordova/BuildHelper;

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 3.379 secs
Error: /home/thor/Projects/App_CDP/platforms/android/gradlew: Command failed with exit code 1 Error output:
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define Lorg/apache/cordova/BuildHelper;

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

Voici la sortie de cordova plugins list Je n'ai pas le conflit support-v4/v13 comme vous pouvez le voir :

$ cordova plugin list
com.googlemaps.ios 2.2.0-fixed "Google Maps SDK for iOS"
com.moust.cordova.videoplayer 1.0.1 "Video Player"
cordova-plugin-camera 2.4.1 "Camera"
cordova-plugin-compat 1.1.0 "Compat"
cordova-plugin-console 1.0.5 "Console"
cordova-plugin-device 1.1.4 "Device"
cordova-plugin-facebook4 1.9.1 "Facebook Connect"
cordova-plugin-file 4.0.0 "File"
cordova-plugin-file-transfer 1.6.3 "File Transfer"
cordova-plugin-geolocation 2.4.3 "Geolocation"
cordova-plugin-googlemaps 1.4.0 "phonegap-googlemaps-plugin"
cordova-plugin-inappbrowser 1.7.1 "InAppBrowser"
cordova-plugin-splashscreen 4.0.3 "Splashscreen"
cordova-plugin-statusbar 2.2.2 "StatusBar"
cordova-plugin-whitelist 1.3.1 "Whitelist"
ionic-plugin-keyboard 2.2.1 "Keyboard"
{}

Voici également quelques informations supplémentaires :

$ cordova -v
7.0.1

$ ionic -v
2.1.4

0 votes

0 votes

J'ai déjà essayé cette solution et ça n'a pas marché pour moi.

164voto

DaveAlden Points 18934

Très probablement, vous êtes à l'aide de la nouvellement libérés cordova-android@6.3.0, qui comprend maintenant BuildHelper.java (comme indiqué dans votre message d'erreur) et PermissionHelper.javamais vous avez encore le obsolète cordova-plugin-compat dans votre projet qui est à l'origine de l'échec de la copie, car il contient aussi de ces classes.

Pour résoudre ce problème, retirez cordova-plugin-compat de votre projet pour désinstaller ces fichiers Java à partir de l' cordova-android projet de plate-forme::

cordova plugin rm cordova-plugin-compat --force

Mise à jour

Persister ce changement d'ajouter cordova-plugin-compat@1.2 qui comprend un moteur de contrainte pour empêcher les fichiers Java en cours de re-installé dans l' cordova-android@6.3+ plate-forme:

cordova plugin add cordova-plugin-compat@1.2

Une autre mise à jour (copypasted de commentaires)

Après la suppression et l'ajout de cordova-plugin-compat@1.2 au lieu de la suppression et l'ajout d'ensemble de la plate-forme Android, vous pouvez uniquement supprimer des fichiers BuildHelper.java et PermissionHelper.java à partir du dossier de plates-formes/android

0 votes

Hey tanks ça marche bien maintenant. Mais j'ai dû supprimer cordova-plugin-camera et je ne sais pas s'il est remplacé par la nouvelle version.

3 votes

Si vous préférez vous en tenir à cordova-android@6.2.3 assurez-vous que le package.json y config.xml dans le dossier de votre projet, utilisez "6.2.3" no "^6.2.3" puis supprimer le platforms/android dossier, réexécution cordova prepare android y cordova build android ne devrait pas avoir d'erreur.

0 votes

Il faut s'inquiéter de l'avertissement : The plugin 'cordova-plugin-compat' is required by (cordova-plugin-geolocation) but forcing removal ?

42voto

Eric Points 813

Je vais ajouter mes deux cents puisqu'aucune des solutions ne fonctionne pour moi. La seule chose qui a fonctionné pour moi :

cordova plugin rm cordova-plugin-compat --force
cordova platform rm android
cordova platform add android@6.3.0

2 votes

Merci, ça marche. J'ai passé des heures à résoudre ce problème et j'ai finalement atterri ici.

0 votes

Merci. Ça a sauvé ma journée.

19voto

jlchereau Points 698

Je devais le faire :

cordova plugin rm cordova-plugin-compat --force
cordova plugin add cordova-plugin-compat@1.2
cordova platform rm android
cordova platform add android@6.3.0

considérant que vous ne pouvez pas simplement supprimer cordova-plugin-compat car des plugins comme cordova-plugin-file en dépendent.

0 votes

La version 1.2 est pour la rétrocompatibilité - "On ne travaille plus sur ce plugin car la fonctionnalité fournie par ce plugin est maintenant incluse dans cordova-Android 6.3.0. Vous devez mettre à jour votre application pour utiliser la version 1.2.0 de ce plugin. Il détectera si le plugin est nécessaire ou non en fonction de la version de cordova-Android que votre application utilise."

0 votes

Merci pour cette explication @AdamMaloney !

12voto

Alexander S. Points 544

Je sais que la question a déjà reçu une réponse, mais je veux ajouter un lien vers les notes de publication officielles :

https://cordova.apache.org/news/2017/11/10/plugins-release.html

Dans notre dernière version de plugins, nous avons déprécié cordova-plugin-compat depuis son intégration dans cordova-Android@6.3.0. Pour ce cycle de publication, nous avons donc supprimé la dépendance des plugins qui en dépendaient et leur avons fait faire un saut de version majeur. Les plugins suivants ont abandonné cordova-plugin-compat : cordova-plugin-camera, cordova-plugin-contacts, cordova-plugin-file, cordova-plugin-geolocation, cordova-plugin-media, et cordova-plugin-media-capture .

Veillez donc à mettre à jour tous les plugins répertoriés à la version indiquée dans les notes de publication.

2 votes

C'est ainsi que la MEILLEURE réponse devrait être marquée ! Merci, Alexander ! Je ne me sentais pas bien d'avoir à rétrograder en 6.3.0 comme tant d'autres l'ont suggéré - il devait y avoir un meilleur moyen.

0 votes

Merci, vous avez sauvé ma journée.

9voto

Made in Moon Points 818

Une solution : le déclassement cordova android platform @6.2.3

$ cordova platform remove android && cordova platform add android@6.2.3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X