多个 dex 文件定义 Lorg/apache/cordova/BuildHelper
Posted
技术标签:
【中文标题】多个 dex 文件定义 Lorg/apache/cordova/BuildHelper【英文标题】:Multiple dex files define Lorg/apache/cordova/BuildHelper 【发布时间】:2018-03-15 16:41:22 【问题描述】:从昨天开始我就有麻烦了。在我的实习中,我遇到了以下构建错误,但我不明白为什么:
$ 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
【问题讨论】:
试试这个***.com/questions/32511242/… 我已经尝试过这个修复,但它对我不起作用。 【参考方案1】:您很可能正在使用新发布的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
另一个更新(从 cmets 复制粘贴)
删除和添加cordova-plugin-compat@1.2后,您只能从文件夹platforms/android中删除文件BuildHelper.java和PermissionHelper.java,而不是删除和添加整个Android平台
【讨论】:
嘿坦克它现在工作正常。但我不得不删除cordova-plugin-camera,我不知道它是否被我的新版本取代 如果您更愿意使用cordova-android@6.2.3
,请确保项目文件夹中的package.json
和config.xml
使用"6.2.3"
而不是"^6.2.3"
,然后删除platforms/android
文件夹,重新运行cordova prepare android
,cordova build android
应该没有错误。
应该担心警告:The plugin 'cordova-plugin-compat' is required by (cordova-plugin-geolocation) but forcing removal
?
当我强制卸载 compat 时,我还想知道一些其他插件需要 compat 的警告。你怎么能毫无问题地做到这一点,因为据我所知,这只是版本 1.1.0 的问题。一旦您强制卸载它并再次安装插件,您将获得 1.2 版,它不再导致问题。
删除和添加cordova-plugin-compat@1.2后,您只能从文件夹platforms/android/src/org/中删除文件BuildHelper.java和PermissionHelper.java,而不是删除和添加整个Android平台阿帕奇/科尔多瓦【参考方案2】:
要加我的 2 美分,因为没有一个解决方案适合我。 唯一对我有用的东西:
cordova plugin rm cordova-plugin-compat --force
cordova platform rm android
cordova platform add android@6.3.0
【讨论】:
谢谢,它有效。我花了好几个小时来解决这个问题,终于来到了这里。 谢谢。拯救了我的一天。【参考方案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 这样的插件依赖于它。
【讨论】:
它的 1.2 版本是为了向后兼容 - “这个插件不再工作,因为这个插件提供的功能现在包含在 cordova-android 6.3.0 中。你应该升级你的应用程序到使用这个插件的1.2.0版本,它会根据你的应用使用的cordova-android版本检测是否需要插件。" 感谢@AdamMaloney 的解释!【参考方案4】:我知道问题已经回答了,但我想添加官方发布说明的链接:
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 -捕获。
因此,请确保将所有列出的插件更新为发布说明中发布的版本。
【讨论】:
这是最好的答案应该被标记为!亚历山大干杯!正如许多人建议的那样,我不得不降级到 6.3.0 感觉并不好 - 必须有更好的方法。 谢谢你,你拯救了我的一天【参考方案5】:一种解决方案:降级cordova android platform @6.2.3
$cordova platform remove android && cordova platform add android@6.2.3
【讨论】:
【参考方案6】:我的 Ionic 3 项目足以运行:
ionic cordova plugin rm cordova-plugin-compat --force
ionic cordova plugin add cordova-plugin-compat@1.2
然后再次运行构建。无需删除和添加平台。
【讨论】:
【参考方案7】:我正在使用 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
这对我有用。
【讨论】:
【参考方案8】:我有同样的错误,我的插件中没有兼容插件,我只是运行该代码,然后我构建,它工作正常
$ cordova platform remove android && cordova platform add android@6.2.3
【讨论】:
【参考方案9】:强制删除插件cordova-plugin-compat android sdk 6.3.0 以上版本或同等版本,因为它与cordova android 集成。
cordova 插件 rm cordova-plugin-compat --force
作为下面的参考
https://cordova.apache.org/announcements/2017/09/27/android-release.html
【讨论】:
【参考方案10】:cordova 插件 rm cordova-plugin-compat --force
cordova 平台 rm android
cordova平台添加android@6.3.0
cordova插件添加cordova-plugin-compat@1.2
按这个顺序,对我有用!!非常感谢
【讨论】:
【参考方案11】:这是解决方案:
cordova plugin rm cordova-plugin-compat --force
【讨论】:
【参考方案12】:我确认 DaveAlden 的回答有效!!
但是在cordova-plugin-compat 中的plugin.xml 中,我有一个小于符号'
这个问题出现在visual studio中,你不能用配置管理器安装插件,因为它在插件资源的xml中检测到这个语法错误。
你必须像 DaveAlden 所说的那样使用命令行安装。
忽略错误,安装后替换:
<engine name="cordova-android" version="<6.3.0"/>
通过
<engine name="cordova-android" version="<6.3.0"/>
最后运行编译!! :)
【讨论】:
【参考方案13】:在更新其他插件的依赖后,我已经删除了 Compat 插件;喜欢相机到新版本,它的工作。 例子: 科尔多瓦插件rm科尔多瓦插件相机--保存 cordova 插件添加 cordova-plugin-camera@latest --save 发布新插件添加旧版本 2.3.0 已替换为 4.0.2 用于相机插件。
在这一步之后。我只是删除了插件“Compat” cordova 插件 rm cordova-plugin-compat --force
【讨论】:
【参考方案14】:在简历上。这意味着plugin-camera与最新版本的android oreo不兼容
【讨论】:
【参考方案15】:我正在使用 Ionic 4,这为我解决了这个问题(只需几秒钟即可运行):
cordova clean
【讨论】:
【参考方案16】:android 版本中的插件可能不匹配。所以最好运行 2 个命令以成功构建
cordova platform rm android
cordova platform add android
在浪费了 2 天之后,这对我来说似乎只是可行的解决方案。
【讨论】:
【参考方案17】:以上解决方案都不适合我。对我来说,解决方案是升级 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
【讨论】:
以上是关于多个 dex 文件定义 Lorg/apache/cordova/BuildHelper的主要内容,如果未能解决你的问题,请参考以下文章
无法执行dex:多个dex文件定义了Lcom/myapp/R$array;
无法执行dex:多个dex文件定义了Lorg/apache/cordova/App$1
多个 dex 文件定义 Lcom/google/firebase/FirebaseException
如何修复将字节码转换为 dex 的错误原因:com.android.dex.DexException:多个 dex 文件定义 Lorg/apache/http/conn/ssl/AbstractVer
多个dex文件定义Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat