Mehrere Dex-Dateien definieren Lorg / apache / cordova / BuildHelper

73

Ich bin seit gestern in Schwierigkeiten. Während meines Praktikums hatte ich folgenden Buildfehler, aber ich konnte nicht verstehen warum:

$ 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.

Hier ist die Ausgabe von cordova plugins list, ich habe nicht den Support-v4 / v13-Konflikt, wie Sie sehen können:

$ 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"
{}

Hier noch einige weitere Informationen:

$ cordova -v
7.0.1

$ ionic -v
2.1.4
Biboozz
quelle
Versuchen Sie diese stackoverflow.com/questions/32511242/…
Ankita
Ich habe dieses Update bereits ausprobiert und es hat bei mir nicht funktioniert.
Biboozz

Antworten:

161

Höchstwahrscheinlich verwenden Sie die neu veröffentlichte Version [email protected], die jetzt BuildHelper.java (wie in Ihrer Fehlermeldung angegeben) und PermissionHelper.java enthält , aber Sie haben immer noch die veraltete Cordova-Plugin-Kompatibilität in Ihrem Projekt, die dazu führt, dass der Build fehlschlägt, weil es enthält auch diese Klassen .

Um dies zu beheben, entfernen Sie es cordova-plugin-compataus Ihrem Projekt, um diese Java-Dateien vom cordova-androidPlattformprojekt zu deinstallieren :

cordova plugin rm cordova-plugin-compat --force

Aktualisieren

Um diese Änderung beizubehalten, fügen Sie [email protected]eine Engine hinzu, die eine Engine-Einschränkung enthält , um zu verhindern, dass die Java-Dateien erneut auf der [email protected]+Plattform installiert werden:

cordova plugin add cordova-plugin-compat@1.2

Ein weiteres Update (kopiert aus Kommentaren)

Nach dem Entfernen und Hinzufügen von [email protected] können Sie anstelle des Entfernens und Hinzufügens der gesamten Android-Plattform nur die Dateien BuildHelper.java und PermissionHelper.java aus den Ordnerplattformen / android entfernen

DaveAlden
quelle
Hey Panzer, es funktioniert jetzt gut. Aber ich musste die Cordova-Plugin-Kamera entfernen und ich weiß nicht, ob sie durch die neue Version ersetzt wurde
Biboozz
3
Wenn Sie lieber dabei bleiben möchten [email protected], stellen Sie sicher, dass das package.jsonund config.xmlin Ihrem Projektordner "6.2.3"nicht verwendet wird "^6.2.3", löschen Sie den platforms/androidOrdner, führen Sie ihn erneut aus cordova prepare androidund cordova build androidsollten Sie keine Fehler haben.
BeatriceThalo
Sollte sich über die Warnung Sorgen machen : The plugin 'cordova-plugin-compat' is required by (cordova-plugin-geolocation) but forcing removal?
Hergestellt in Moon
1
Ich habe mich auch über die Warnung gewundert, dass Kompatibilität von einigen anderen Plugins benötigt wird, als ich die Deinstallation von Kompatibilität erzwang. Wie auch immer, Sie können dies ohne Probleme tun, da dies, soweit ich das beurteilen kann, nur ein Problem der Version 1.1.0 ist. Sobald Sie die Deinstallation erzwingen und das Plugin erneut installieren, erhalten Sie Version 1.2, die das Problem nicht mehr verursacht.
Oliver
6
Nach dem Entfernen und Hinzufügen von [email protected] können Sie anstelle des Entfernens und Hinzufügens der gesamten Android-Plattform nur die Dateien BuildHelper.java und PermissionHelper.java aus den Ordnerplattformen / android / src / org / apache / cordova entfernen
Patrik
42

Ich werde meine 2 Cent hinzufügen, da keine der Lösungen für mich funktioniert. Einzige Sache, die bei mir funktioniert hat:

cordova plugin rm cordova-plugin-compat --force
cordova platform rm android
cordova platform add android@6.3.0
Eric
quelle
2
Danke, es funktioniert. Ich habe Stunden damit verbracht, dieses Problem zu lösen und bin endlich hier gelandet.
fxbayuanggara
Vielen Dank. hat meinen Tag gerettet.
Arpit Vasani
19

Ich musste es machen:

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

Bedenken Sie, dass Sie Cordova-Plugin-kompatibel nicht einfach entfernen können, da Plugins wie Cordova-Plugin-Datei davon abhängen.

jlchereau
quelle
1.2 Version davon dient der Abwärtskompatibilität - "Dieses Plugin wird nicht mehr bearbeitet, da die von diesem Plugin bereitgestellten Funktionen jetzt in Cordova-Android 6.3.0 enthalten sind. Sie sollten Ihre Anwendung aktualisieren, um Version 1.2.0 dieses Plugins zu verwenden Es erkennt anhand der von Ihrer App verwendeten Version von Cordova-Android, ob das Plugin erforderlich ist oder nicht. "
Adam Maloney
Danke für diese Erklärung @AdamMaloney!
Kunal
12

Ich kenne die bereits beantwortete Frage, möchte aber einen Link zu den offiziellen Versionshinweisen hinzufügen:

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

In unserer letzten Plugins-Version haben wir die Cordova-Plugin-Kompatibilität abgelehnt, da sie in [email protected] integriert wurde. Für diesen Release-Zyklus haben wir die Abhängigkeit von Plugins, die sich darauf verlassen, entfernt und den Plugins einen wichtigen Versionssprung gegeben. Die folgenden Plugins haben Cordova-Plugin-kompatibel gelöscht: Cordova-Plugin-Kamera, Cordova-Plugin-Kontakte, Cordova-Plugin-Datei, Cordova-Plugin-Geolocation, Cordova-Plugin-Medien und Cordova-Plugin-Medienerfassung .

Stellen Sie daher sicher, dass Sie alle aufgelisteten Plugins auf die in den Versionshinweisen angegebene Version aktualisieren.

Alexander S.
quelle
2
Dies ist, was die beste Antwort als markiert werden sollte! Prost Alexander! Ich fühlte mich nicht gut, nur auf 6.3.0 herunterstufen zu müssen, wie so viele vorgeschlagen hatten - es musste einen besseren Weg geben.
Jester
Danke, du hast meinen Tag gerettet
Paola Reyes
9

Eine Lösung: Downgrade cordova android platform @6.2.3

$ cordova platform remove android && cordova platform add [email protected]

Made in Moon
quelle
4

Mit meinem Ionic 3-Projekt war es genug zu laufen:

ionic cordova plugin rm cordova-plugin-compat --force
ionic cordova plugin add cordova-plugin-compat@1.2

Führen Sie dann erneut einen Build aus. Die Plattform muss nicht entfernt und hinzugefügt werden.

Dunkles Lächeln
quelle
4

Ich benutze für Ionic 3Projekt, ich muss tun:

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

Es ist Arbeit für mich.

MD.Riyaz
quelle
3

Ich hatte den gleichen Fehler und ich hatte kein kompatibles Plugin in meinen Plugins. Ich habe nur diesen Code ausgeführt, dann habe ich gebaut, es hat gut funktioniert

$ cordova platform remove android && cordova platform add android@6.2.3
Maryam
quelle
1

cordova plugin rm cordova-plugin-kompatibel --force

Cordova Plattform RM Android

Cordova Plattform hinzufügen [email protected]

Cordova Plugin [email protected] hinzufügen

in dieser Reihenfolge funktioniert für mich !! Danke vielmals

Alejandro Cristian
quelle
1

Das ist die Lösung:

cordova plugin rm cordova-plugin-compat --force
Talha Baktır
quelle
0

Ich bestätige diese Antwort von DaveAlden Works !!

Aber in der plugin.xml innerhalb der Cordova-Plugin-Kompatibilität hatte ich einen Syntaxfehler mit weniger als dem Zeichen '<', weil es in xml illegal ist.

Dieses Problem tritt in Visual Studio auf und Sie können das Plugin nicht mit dem Konfigurationsmanager installieren, da dieser Syntaxfehler in XML in der Plugin-Ressource erkannt wird.

Sie müssen mit der Befehlszeile installieren, wie DaveAlden sagt.

Fehler ignorieren und nach der Installation ersetzen:

<engine name="cordova-android" version="<6.3.0"/>

durch

<engine name="cordova-android" version="&lt;6.3.0"/>

Und Kompilierungslauf am Ende !! :) :)

BHs Cyril
quelle
0

Ich habe das Compat-Plugin nach dem Update von der Abhängigkeit anderer Plugins entfernt; wie Kamera auf die neue Version und es funktioniert. Beispiel: Cordova-Plugin rm Cordova-Plugin-Kamera - Cordova-Plugin speichern Cordova-Plugin-Kamera hinzufügen @ neueste - Speichern Nach dem neuen Plugin wurde die alte Version 2.3.0 durch 4.0.2 für Kamera-Plugin ersetzt.

nach diesem Schritt. Ich habe einfach das Plugin "Compat" Cordova Plugin rm Cordova-Plugin-kompatibel --force entfernt

Ajit Kumar Singh
quelle
0

Auf Wiederaufnahme. Dies bedeutet, dass die Plugin-Kamera nicht mit der letzten Version von Android Oreo kompatibel ist

Renato Alvarez
quelle
0

Ich benutze Ionic 4 und dies hat es für mich gelöst (es dauert nur ein paar Sekunden, um zu laufen):

cordova clean
Baub
quelle
0

Möglicherweise stimmen die Plugins in den Android-Builds nicht überein. Führen Sie also besser 2 Befehle für eine erfolgreiche Erstellung aus

cordova platform rm android
cordova platform add android

Nach 2 verschwendeten Tagen scheint dies nur eine funktionierende Lösung für mich zu sein.

Pradeep Kachhawaha
quelle
0

Keine der oben genannten Lösungen hat bei mir funktioniert. Für mich bestand die Lösung darin, gradle zu aktualisieren. Ich habe Gradle 5.6.2 verwendet. Das Aktualisieren auf 5.6.4 und das Entfernen und Hinzufügen meiner Android-Plattform und Plugins haben den Trick getan.

brew upgrade gradle

Gradle unter Mac OS X installieren / aktualisieren

rm -rf plugins/*

cordova platform rm android

cordova platform add android
Gerber Burton
quelle