Gradle - 意想不到的顶级异常 - 无处不在

时间:2014-06-16 07:57:50

标签: android android-studio android-gradle build.gradle

相当一定的格斗对我来说。几天前开始一个工作正常的项目。更新了android studio并再次打开了该项目。我已经尝试了所有我能想到的东西,从删除/更新库检查xml文件和结构。删除gradle缓存并安装最新的jdk,似乎没有任何帮助。

还尝试添加:

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

引用stackoverflow上的其他帖子

我从控制台导出了错误,它看起来像这样:

objc[2338]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536
    at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:501)
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:276)
    at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:490)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:167)
    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)
:Derp:dexDerpDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Derp:dexDerpDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /Applications/Android Studio.app/sdk/build-tools/19.1.0/dx --dex --num-threads=4 

--output /Users/MorePathStuffForALongWhile

  Error Code:
    2
  Output:
    objc[2338]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined.

3 个答案:

答案 0 :(得分:1)

你的问题:你已经通过约。编译应用程序时65000方法限制。您必须找到一种方法来减少应用中的方法数量。

如果您使用的是Google Play服务,可以尝试使用this method进行更精细的编译。

如果没有,您可以简单地使用multiDex(确保您使用的是最新版本的Android Studio)。在build.gradle文件中使用它:

android {
    defaultConfig {
        ...
        multiDexEnabled = true
    }
}

答案 1 :(得分:0)

如果您使用gson或jackson,请尝试删除其依赖项。它对我有用。 compile 'com.google.code.gson:gson:2.1

答案 2 :(得分:0)

您的源代码+所有包含的库最终会有超过65k的方法定义。目前是limitation of dex

为了避免这种情况,引入了multidex support。编译时输出类被拆分并捆绑在多个dex文件中。在运行时,它们是从多个dex文件加载的。

要实现这一目标,您需要添加multidex支持:

android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
}
...
}

dependencies {
  compile 'com.android.support:multidex:1.0.0'
}

并设置一个扩展MultiDexApplication的Application类。