多个dex文件定义了Lorg / apache / cordova / BuildHelper


73

自昨天以来我有麻烦了。在实习期间,我遇到以下构建错误,但我不明白为什么:

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

这是的输出cordova plugins list,如您所见,我没有support-v4 / v13冲突:

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

这里还有更多信息:

$ cordova -v
7.0.1

$ ionic -v
2.1.4


我已经尝试过此修复程序,但对我没有用。
Biboozz

Answers:


161

您最有可能使用的是新发布的cordova-android@6.3.0,现在包含BuildHelper.java(如错误消息中所述)和PermissionHelper.java,但是您的项目中仍然有弃用的cordova-plugin-compat,这会导致构建失败,因为它还包含这些类

要解决此问题,请cordova-plugin-compat从您的项目中删除以从cordova-android平台项目中卸载以下Java文件:

cordova plugin rm cordova-plugin-compat --force

更新资料

要保留此更改,添加cordova-plugin-compat@1.2其中包括一个引擎约束,以防止将Java文件重新安装到cordova-android@6.3+平台中:

cordova plugin add cordova-plugin-compat@1.2

另一个更新(从评论中复制)

删除并添加cordova-plugin-compat@1.2之后,只能删除文件夹platform / android中的文件BuildHelper.java和PermissionHelper.java,而不是删除并添加整个Android平台。


嘿,坦克,现在工作正常。但是我不得不删除了cordova-plugin-camera,我不知道它是否被替换为我的新版本
Biboozz

3
如果您愿意使用cordova-android@6.2.3,请确保在项目文件夹中使用package.jsonand而不是,然后删除该文件夹并重新运行,并且应该没有错误。config.xml"6.2.3""^6.2.3"platforms/androidcordova prepare androidcordova build android
BeatriceThalo

应约警告担心:The plugin 'cordova-plugin-compat' is required by (cordova-plugin-geolocation) but forcing removal
制造于月球

1
我还想知道警告,当我强制卸载compat时,某些其他插件需要compat。据我所知,您怎么能做到这一点没有问题,因为这仅是1.1.0版的问题。强制将其卸载并重新安装插件后,您将获得版本1.2,该版本不再导致此问题。
奥利弗·

6
在删除和添加cordova-plugin-compat@1.2之后,除了删除和添加整个Android平台,您只能从文件夹platform / android / src / org / apache / cordova
Patrik

42

我要加2美分,因为没有一种解决方案对我有用。唯一对我有用的东西:

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

2
谢谢,它有效。我已经花了几个小时来解决这个问题,最后才降落在这里。
fxbayuanggara

谢谢。拯救了我的一天。
Arpit Vasani

19

我必须做:

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

考虑到您不能简单地删除cordova-plugin-compat,因为像cordova-plugin-file这样的插件都依赖于它。


它的1.2版本是为了向后兼容-“此插件已不再使用,因为此插件提供的功能现已包含在cordova-android 6.3.0中。您应升级应用程序以使用此插件的1.2.0版。它将根据您的应用使用的cordova-android版本来检测是否需要该插件。”
亚当·马洛尼

感谢您的解释@AdamMaloney!
Kunal

12

我知道问题已经回答,但是我想在官方发行说明中添加链接:

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

在上一个插件版本中,不赞成使用cordova-plugin-compat,因为它已集成到cordova-android@6.3.0中。因此,在此发行周期中,我们已从依赖它的插件中删除了依赖项,并为插件提供了主要版本跳转。以下插件删除了与cordova-plugin-compat兼容的插件:cordova-plugin-camera,cordova-plugin-contacts,cordova-plugin-file,cordova-plugin-geolocation,cordova-plugin-media和cordova-plugin-media-capture

因此,请确保将所有列出的插件更新为发行说明中发布的版本。


2
这是最佳答案应标记为的内容!干杯亚历山大!就像许多人建议的那样,我不得不降级到6.3.0令我感到不舒服-必须有更好的方法。
小丑

谢谢,您拯救了我的一天
Paola Reyes

9

一种解决方案:降级 cordova android platform @6.2.3

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


4

对于我的Ionic 3项目,足以运行:

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

然后再次运行构建。无需删除和添加平台。


4

Ionic 3我正在使用Project,我必须这样做:

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

这对我有用。


3

我有同样的错误,并且我的插件中没有compat插件,我只运行该代码,然后我构建了它,效果很好

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




0

我确认DaveAlden的答案有效!

但是在cordova-plugin-compat内部的plugin.xml中,我遇到了一个语法错误,带有小于号“ <”的内容,因为它在xml中是非法的。

此问题出现在Visual Studio中,并且您无法使用配置管理器安装插件,因为它在插件资源上的xml中检测到此语法错误。

您必须使用DaveAlden所说的命令行进行安装。

忽略错误,并在安装后替换:

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

通过

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

然后编译运行!!:)


0

更新其他插件的依赖关系后,我已经删除了Compat插件;例如将Camera升级到新版本即可使用。示例:cordova插件rm cordova-plugin-camera-保存cordova插件add cordova-plugin-camera @ latest --save发布新插件后,将旧版本2.3.0替换为Camera插件4.0.2。

在这一步之后。我只是删除了插件“ Compat” cordova插件rm cordova-plugin-compat --force



0

我正在使用Ionic 4,这为我解决了它(只需要几秒钟即可运行):

cordova clean

0

android版本中的插件可能不匹配。所以最好运行2条命令以成功构建

cordova platform rm android
cordova platform add android

在浪费了两天之后,这似乎对我来说只是解决方案。


0

以上解决方案均不适用于我。对我来说,解决方案是升级gradle。我正在使用gradle 5.6.2。更新到5.6.4,然后删除并添加我的android平台和插件即可解决问题。

brew upgrade gradle

在Mac OS X上安装/升级gradle

rm -rf plugins/*

cordova platform rm android

cordova platform add android
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.