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

Android 无法执行dex:多个dex文件定义Lorg/apache/cordova/App$1,android,apache,cordova,android-studio,Android,Apache,Cordova,Android Studio,由于cordova for android的高优先级安全修复程序,我们需要在应用程序中更新cordova版本(从2.7.0到3.6.3)。所以我们认为最好创建一个新项目 我安装了cordova并使用cordova cli api创建了一个项目。 我还添加了android平台,添加了许多cordova插件。 然后我把我们的sencha touch内容复制到了www文件夹中 然后我打电话给cordova build android 之后,我在android Studio(0.8.11)中导入了这个a

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

我安装了cordova并使用cordova cli api创建了一个项目。 我还添加了android平台,添加了许多cordova插件。 然后我把我们的sencha touch内容复制到了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(从),并将所有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


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

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

例如,您可能有一个类:

com.android.foo.bar.GenericClass

然后你有两个罐子:

tools\u library.jar

more\u tools\u library.jar

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

tools\u library.jar:com.android.foo.bar.GenericClass!=更多工具\u library.jar:com.android.foo.bar.GenericClass

你需要的是:

tools\u library.jar:com.android.foo.bar.GenericClass==more\u tools\u library.jar:com.android.foo.bar.GenericClass

这个问题的一个常见原因是使用了两个不同版本的软件包,比如
android-support-v13.jar
android-support-v4.jar
,这在我身上已经发生了好几次了

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


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

检查:或者彻底检查,这个错误是因为您从多个JAR中获得了相同的引用。谢谢,我发现了我的问题所在:因为我将cordova java文件复制到src/com/apache/cordova/。。。它们已经存在于/CordovaLib/…中。。。不,应用程序正在编译,但我一直都会收到错误:“Cordova exec fail:Class not found”,在我的java文件中,我遇到了类似“无法解析符号CordovaPlugin”的错误。谢谢,我发现了我的问题所在:因为我将Cordova java文件复制到了src/com/apache/Cordova/。。。它们已经存在于/CordovaLib/…中。。。不,应用程序正在编译,但我一直收到错误:“Cordova exec fail:Class not found”,在我的java文件中,我遇到了类似“无法解析symbol CordovaPlugin”的错误