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

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

$ 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
37894 次浏览

很可能您正在使用最新发布的 cordova-android@6.3.0,它现在包括 BuildHelper.java(正如您的错误消息中所指出的)和 Permission onHelper.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之后,不需要删除并添加整个 Android 平台,而只需要从文件夹 Platform/Android 中删除 BuildHelper.java 和 PermisonHelper.java 文件

因为没有一个解决方案对我有效,所以我要加上我的2分钱。 唯一对我有用的是:

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

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

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

我必须这么做:

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 这样的插件依赖于它。

我正在使用 Ionic 3项目,我必须做:

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

这是我的工作。

我确认这个答案由大卫 · 奥尔登工作室提供! !

但是在 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"/>

编译在最后运行! ! :)

我的 Ionic 3项目足以运行:

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

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

Cordova 插件 rm Cordova-plugin-compat-force

科尔多瓦平台 rm 机器人

Cordova 平台添加 android@6.3.0

Cordova plugin 添加 cordova-plugin-compat@1.2

在这个顺序,为我工作! ! 非常感谢

这就是解决办法:

cordova plugin rm cordova-plugin-compat --force

我知道这个问题已经得到了回答,但我想添加到官方发布说明的链接:

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-contact,cordova-plugin-file,cordova-plugin-Geolocation,cordova-plugin-media,and cordova-plugin-media-catch

因此,请确保您更新所有列出的插件的版本张贴在发布说明。

我已经删除了 Compat 插件后,更新的依赖性的其他插件; 像相机的新版本和它的工作。 例如: Cordova 插件 rm cordova-plugin-Camera ——保存 科尔多瓦插件添加科尔多瓦-插件-相机@last —— save 发布新的插件之后,老版本2.3.0被4.0.2的 Camera 插件所取代。

在这个步骤之后。我只需要删除插件“ Compat” Cordova 插件 rm Cordova-plugin-compat-force

这意味着插件摄像头不能与最新版本的机器人奥利奥兼容

我也有同样的错误,我的插件里没有 compat 插件,我只是运行了代码,然后我构建了,它工作得很好

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

我正在使用 Ionic 4,这解决了我的问题(只需要几秒钟运行) :

cordova clean

Android 版本中的插件可能不匹配,所以最好运行2个命令来成功构建

cordova platform rm android
cordova platform add android

在浪费了2天之后,这似乎只是我的工作解决方案。

删除插件科尔多瓦-插件-计算机强制安卓 sdk 以上版本6.3.0或相等,因为它是集成了科尔多瓦安卓。

Cordova 插件 rm Cordova-plugin-compat-force

作为下面的参考

Https://cordova.apache.org/announcements/2017/09/27/android-release.html

以上的方法对我都不管用。对我来说,解决方案是升级级别。我用的是5.6.2级。升级到5.6.4,然后删除并添加我的 android 平台和插件。

brew upgrade gradle

在 Mac OS X 上安装/升级级别

rm -rf plugins/*


cordova platform rm android


cordova platform add android