关于java:Android Studio Google JAR文件导致GC开销限制超出错误

Android Studio Google JAR file causing GC overhead limit exceeded error

我在操作系统上使用Android Studio  X. 我收到此错误消息:

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  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值太低了。 我增加了它们:

/ Applications / Android Studio.app/bin/idea.vmoptions现在它说:

1
2
-Xms256m
-Xmx1024m

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


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

1
2
3
dexOptions {
    javaMaxHeapSize"4g"
}

看看是否有帮助。

(想法由Scott Barta提供的答案)


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

使用Android Studio 1.1.0

1
2
3
4
5
6
android {
    dexOptions {
        incremental true
        javaMaxHeapSize"2048M"
    }
}

将上面的代码放在Build.gradle文件中。


这个新问题是由最新版本的Android引起的。

转到项目根文件夹,打开gradle.properties,然后添加以下选项:

1
2
3
4
5
6
7
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

然后在build.gradle文件中添加以下更改:

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


我禁用了我的即时运行:

菜单首选项→构建→即时运行"启用即时运行到热交换代码"

我想是即时运行会使构建变慢并创建一个大尺寸的pidXXX.hprof文件,导致超出AndroidStudio gc开销限制。

(我的设备SDK是19.)


我正在使用Android Studio 3.4,唯一对我有用的是从我的build.gradle文件中删除以下行:

1
2
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

因为Android Studio 3.4full mode中使用R8并且与Proguard不直接兼容


将其添加到build.gradle文件中

1
2
3
dexOptions {
   javaMaxHeapSize"2g"
}


对我而言,我在这里看到的答案都没有。我猜想让CPU工作得非常困难会使计算机变热。在我关闭消耗大量CPU(如chrome)的程序并冷却我的笔记本电脑之后问题就消失了。

供参考:java.exe进程的CPU占96%-97%,内存占用率超过2,000,000K(实际上是与gradle相关的进程)。


我强制从taskmanger关闭所有Java.exe,重新启动Android Studio,它对我有用

enter image description here