无法执行dex:多个dex文件定义了Lorg/apache/cordova/App$1

Posted

技术标签:

【中文标题】无法执行dex:多个dex文件定义了Lorg/apache/cordova/App$1【英文标题】:Unable to execute dex: Multiple dex files define Lorg/apache/cordova/App$1 【发布时间】:2014-10-10 12:52:29 【问题描述】:

由于cordova for android 中的高优先级安全修复,我们需要在我们的应用程序中更新我们的cordova 版本(从2.7.0 到3.6.3)。所以我们认为创建一个新项目会更好。

我安装了 cordova 并使用 cordova cli api 创建了一个项目。 我还添加了android平台添加了许多cordova插件。 然后我将我们的煎茶触摸内容复制到 www 文件夹中。

然后我打电话给cordova build android

之后我在 Android Studio (0.8.11) 中导入了这个 android 项目。

对于我们的应用,我需要从旧项目中复制以下内容

AndroidManifest.xml res/ 目录中的所有内容 在 src/ 目录中,我添加了一些我们在应用中需要的东西

在我们自己编写的 java 文件(src/ 目录)中,一切都是红色的。所以我们发现在 src/org.apache.cordova/ 只有已安装的科尔多瓦插件的目录。所以我下载了cordova 3.6.X(来自https://github.com/apache/cordova-android/tree/3.6.x)并将所有java文件复制到src/org/apache/cordava。

然后我意识到 lib/ 文件夹中缺少 android-support android-support-v13.jar 库。所以我将它从sdk\extras\android\support\v13 目录中复制出来。之后代码中几乎所有红色的东西都消失了,所以我尝试运行它。

但是我收到了这个错误:

Error:Execution failed for task ':dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    C:\Develop\Android SDK\sdk\build-tools\19.1.0\dx.bat --dex --output D:\www\xxx\native\cordova-project\platforms\android\build\intermediates\dex\debug D:\www\DiLocSyncMobile\native\cordova-project\platforms\android\build\intermediates\classes\debug D:\www\xxx\native\cordova-project\platforms\android\build\intermediates\dependency-cache\debug D:\www\xxx\native\cordova-project\platforms\android\build\intermediates\pre-dexed\debug\android-support-v13-ba93a882b9b887c9c56ff93adba54cb3616bd827.jar D:\www\xxx\native\cordova-project\platforms\android\build\intermediates\pre-dexed\debug\classes-0236632443c0351e54fca9912536c8c02b5ad2b2.jar
Error Code:
    2
Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    com.android.dex.DexException: Multiple dex files define Lorg/apache/cordova/App$1;
        at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
        at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
        at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
        at com.android.dx.command.dexer.Main.run(Main.java:230)
        at com.android.dx.command.dexer.Main.main(Main.java:199)
        at com.android.dx.command.Main.main(Main.java:103)

我的build.gradlefile 有以下依赖项:

dependencies 
    compile fileTree(dir: 'libs', include: '*.jar')
    for (subproject in getProjectList()) 
        compile project(subproject)
    

在我的 lib/ 目录中只是我手动添加的 jar。

请帮助我/谢谢! :-)

【问题讨论】:

检查:***.com/questions/22315834/… 或 ***.com/questions/7870265/… 彻底检查,这个错误是因为你从多个罐子里得到了相同的东西的引用。 谢谢,我发现了我的问题:这是因为我将 cordova java 文件复制到 src/com/apache/cordova/ ...它们已经存在于 /CordovaLib/... 否该应用程序正在编译,但我一直收到错误消息:“Cordova exec 失败:找不到类”,在我的 java 文件中出现“无法解析符号 CordovaPlugin”之类的错误 【参考方案1】:

当您在同一个包中对同一个类有多个引用时,就会发生该错误。

例如你可能有一个类:

com.android.foo.bar.GenericClass

然后你有两个罐子:

tools_library.jar

more_tools_library.jar

而且他们都需要“GenericClass”——但其中一个使用的类版本与另一个不同。在伪代码中,你可能会这样想:

tools_library.jar:com.android.foo.bar.GenericClass != more_tools_library.jar:com.android.foo.bar.GenericClass

你需要它是:

tools_library.jar:com.android.foo.bar.GenericClass == more_tools_library.jar:com.android.foo.bar.GenericClass

这个问题的一个常见原因是使用了两个不同版本的包,例如 android-support-v13.jarandroid-support-v4.jar,这在我身上发生了很多次。

如果其中一个 jar 包含旧版本的 android-support-v4.jar 并且您需要更新版本或 android-support-v13.jar,也会发生这种情况

虽然这可能无法具体回答您的问题(没有足够的信息来确定导致冲突的特定 jar 或类),但我认为提供对比较错误的更具描述性的解释可能会有所帮助到“无法执行 dex”——当我第一次看到它时,我花了很长时间才解密。

【讨论】:

谢谢,我发现了我的问题:这是因为我将 cordova java 文件复制到 src/com/apache/cordova/ ...它们已经存在于 /CordovaLib/... 否该应用程序正在编译,但我一直收到错误:“Cordova exec 失败:找不到类”,在我的 java 文件中出现“无法解析符号 CordovaPlugin”之类的错误

以上是关于无法执行dex:多个dex文件定义了Lorg/apache/cordova/App$1的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 在控制台中显示以下消息:无法执行 dex

多个dex文件定义Lcom/google/android/gms/internal/measurement/zzabn

意外的***异常:com.android.dex.DexException:多个 dex 文件定义

多个 dex 文件定义 Lcom/google/firebase/FirebaseException

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

如何修复将字节码转换为 dex 的错误原因:com.android.dex.DexException:多个 dex 文件定义 Lorg/apache/http/conn/ssl/AbstractVer