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

时间:2017-10-04 10:11:51

标签: android cordova ionic-framework build

我从昨天开始遇到麻烦。在我的实习中,我遇到了以下构建错误,但我无法理解原因:

$ 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的输出,我没有看到支持-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

17 个答案:

答案 0 :(得分:148)

您很可能正在使用新发布的cordova-android@6.3.0,其中现在包含BuildHelper.java(如您的错误消息中所述)和PermissionHelper.java,但您仍然使用了已弃用的cordova-plugin-compat在您的项目中导致构建失败,因为它also contains these classes

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

cordova plugin rm cordova-plugin-compat --force

<强>更新

要保留此更改,请添加cordova-plugin-compat@1.2,其中包含engine constraint,以防止将Java文件重新安装到cordova-android@6.3+平台中:

cordova plugin add cordova-plugin-compat@1.2

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

删除并添加cordova-plugin-compat@1.2后,您只能从文件夹平台/ android

中删除文件BuildHelper.java和PermissionHelper.java,而不是删除和添加整个Android平台

答案 1 :(得分:41)

要加上我的2美分,因为没有一个解决方案适合我。 只有对我有用的东西:

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

答案 2 :(得分: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这样的插件依赖于它。

答案 3 :(得分:9)

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

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

答案 4 :(得分:9)

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

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

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

答案 5 :(得分:4)

通过我的Ionic 3项目,它足以运行:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Note: Focus out see text getting change.
<div class="original-form">
  Enter text here: <input type="text" class="inp_name" placeholder="enter your name" />
</div>
<div class="original-output">
  Entered name: <span class="name_text">Entered Name</span>
</div>

<div class="copied-output">
</div>

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

答案 6 :(得分:3)

我正在使用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

它为我工作。

答案 7 :(得分:2)

我有同样的错误,我的插件中没有compat插件,我只是运行该代码,然后我建立,它工作正常

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

答案 8 :(得分:1)

这是解决方案:

cordova plugin rm cordova-plugin-compat --force

答案 9 :(得分:1)

cordova插件rm cordova-plugin-compat --force

cordova platform rm android

cordova平台添加android@6.3.0

cordova插件添加cordova-plugin-compat@1.2

按此顺序,对我有用!!非常感谢

答案 10 :(得分:0)

我在更新其他插件的依赖关系后删除了Compat插件;像相机到新版本,它的工作。 例: cordova插件rm cordova-plugin-camera --save cordova插件添加cordova-plugin-camera @ latest --save 发布新插件后,旧版本2.3.0被替换为4.0.2 for Camera插件。

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

答案 11 :(得分:0)

简历。这意味着插件相机与最新版本的android oreo不兼容

答案 12 :(得分:0)

我确认DaveAlden的答案有效!!

但是在cordova-plugin-compat里面的plugin.xml中,我的语法错误少于符号&#39;&lt;&#;;因为它在xml中是非法的。

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

您必须使用命令行安装,如DaveAlden所说。

忽略错误,安装后替换:

var comparisionDate = '2017/11/13 15:02';

var todaysDate = new Date();  // current date

// further i don't know to compare

if(comparisionDate == todaysDate ){
   //send notifications
}else{
  // don't show notification
}

通过

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

编译结束! :)

答案 13 :(得分:0)

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

cordova clean

答案 14 :(得分:0)

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

cordova platform rm android
cordova platform add android

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

答案 15 :(得分:0)

强行删除插件cordova-plugin-compat 6.3.0或更高版本的android sdk,因为它已与cordova android集成。

cordova插件rm cordova-plugin-compat --force

作为下面的参考

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

答案 16 :(得分:0)

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

brew upgrade gradle

Install / upgrade gradle on Mac OS X

rm -rf plugins/*

cordova platform rm android

cordova platform add android