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

时间:2014-10-10 12:52:29

标签: android apache cordova android-studio

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

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

然后我打电话给cordova build android

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

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

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

在我们自己编写的java文件(src /目录)中,一切都是红色的。所以我们发现了 src/org.apache.cordova/只有已安装的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.gradle文件具有以下依赖项:

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

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

请帮助我/先谢谢!! : - )

1 个答案:

答案 0 :(得分: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这两个不同版本的软件包,这种情况多次发生在我身上。

如果其中一个广告集包含旧版android-support-v4.jar并且您需要更新版本或android-support-v13.jar

,也会发生这种情况

虽然这可能没有具体回答你的问题(没有足够的信息来确定导致冲突的特定jar或类),但我认为至少可以提供更具描述性的解释。错误与&#34相比;无法执行dex" - 当我第一次看到它时,我花了很长时间才解密。