我在OS x上使用Android Studio,我得到这个错误消息:

FAILURE: Build failed with an exception. What went wrong: Execution failed for task ':app:preDexDebug'. com.android.ide.common.internal.LoggedErrorException: Failed to run command: /Applications/Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output /Users/alex/AndroidStudioProjects/SilentSMS/app/build/intermediates/pre-dexed/debug/android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4.3_r2.1.jar Error Code: 3 Output:

  UNEXPECTED TOP-LEVEL ERROR:
  java.lang.OutOfMemoryError: GC overhead limit exceeded
      at com.android.dx.cf.code.RopperMachine.getSources(RopperMachine.java:665)
      at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:288)
      at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612)
      at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:412)
      at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94)
      at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:782)
      at com.android.dx.cf.code.Ropper.doit(Ropper.java:737)
      at com.android.dx.cf.code.Ropper.convert(Ropper.java:346)
      at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:282)
      at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:139)
      at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:94)
      at com.android.dx.command.dexer.Main.processClass(Main.java:682)
      at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
      at com.android.dx.command.dexer.Main.access$600(Main.java:78)
      at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
      at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
      at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
      at com.android.dx.command.dexer.Main.processOne(Main.java:596)
      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
      at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
      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)

我正在使用这个库:

http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/

我拉JAR文件并将其添加到我的项目-我要构建的项目是:

https://github.com/domi007/silentSMS/

我知道这是因为我的xms和xmx值太低了。我增加了它们:

/应用程序/ Android Studio.app / bin /想法。Vmoptions,所以它现在说:

-Xms256m
-Xmx1024m

然而,我仍然得到错误。这是由什么引起的?除了silentSMS应用程序是一个Eclipse项目和我将代码移植到Android Studio之外,我没有改变任何东西。在Android Studio发现错误方面-它没有,其他一切看起来都很好。


当前回答

我尝试了上面提到的所有解决方案,但我仍然面临这个问题。 最后,我偶然发现了以下解决问题的方法。

(MacOS)进入首选项->内存设置->找到现有的等级恶魔(s) ->停止所有它们。

其他回答

此问题是由最新版本的Android系统引起的。

转到项目根文件夹,打开gradle。属性,并添加以下选项:

org.gradle.daemon=true

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

org.gradle.parallel=true

org.gradle.configureondemand=true

然后在构建中添加这些更改。gradle文件:

dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
}

对我来说,我在这里看到的答案都不可行。我猜,让中央处理器工作得特别卖力会让电脑变热。当我关闭消耗大量CPU的程序(如chrome)并冷却我的笔记本电脑后,这个问题就消失了。

作为参考:我的CPU在96%-97%,通过java.exe进程(实际上是与gradle相关的进程)使用内存超过2,000,000K。

在我的例子中,增加堆的大小看起来像这样:

使用Android Studio 1.1.0

android {
    dexOptions {
        incremental true
        javaMaxHeapSize "2048M"
    }
}

将上述代码放入构建中。gradle文件。

我认为有一种单独的方法可以提高dexing操作的堆限制。将此添加到构建中的android闭包中。gradle文件:

dexOptions {
    javaMaxHeapSize "4g"
}

看看这是否有用。

(灵感来源于Scott Barta的回答)

我尝试了上面提到的所有解决方案,但我仍然面临这个问题。 最后,我偶然发现了以下解决问题的方法。

(MacOS)进入首选项->内存设置->找到现有的等级恶魔(s) ->停止所有它们。