Android Studio Google JAR file causing GC overhead limit exceeded error
JavaAndroidOverheadJava Problem Overview
I am using Android Studio on OS X. I am getting this error message:
> 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)
I am using this library:
http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/
I pulled the JAR file and added it to my project - the project I am trying to build is:
https://github.com/domi007/silentSMS/
I understand it is because my xms and xmx values are too low. I increased them in:
/Applications/Android Studio.app/bin/idea.vmoptions so that it now says:
-Xms256m
-Xmx1024m
However, I still get the error. What could this be caused by? Apart from the silentSMS app being an Eclipse project and me porting the code over to Android Studio I haven't changed anything. In terms of Android Studio spotting errors - it doesn't, and everything else looks fine.
Java Solutions
Solution 1 - Java
I think there's a separate way to raise the heap limit of the dexing operation. Add this to your android
closure in your build.gradle
file:
dexOptions {
javaMaxHeapSize "4g"
}
and see if that helps.
(idea courtesy of this answer from Scott Barta)
Solution 2 - Java
In my case, to increase the heap-size looks like this:
Using Android Studio 1.1.0
android {
dexOptions {
incremental true
javaMaxHeapSize "2048M"
}
}
Put the above code in your Build.gradle file.
Solution 3 - Java
This new issue is caused by the latest version of Android.
Go to your project root folder, open gradle.properties
, and add the following options:
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
Then add these changes in your build.gradle
file:
dexOptions {
incremental = true
preDexLibraries = false
javaMaxHeapSize "4g" // 2g should be also OK
}
Solution 4 - Java
Android Studio 3.5.3
Find the Memory Settings (Cmd + Shift + A on Mac or click on Help and start typing "Memory Settings") under Preferences/ Settings and increase the IDE Heap Size and/ or the Daemon Heap Size to your satisfaction
Solution 5 - Java
I disable my Instant Run by:
Menu Preference → Build → Instant Run "Enable Instant Run to hot swap code"
I guess it is the Instant Run that makes the build slow and creates a large size pidXXX.hprof file which causes the AndroidStudio gc overhead limit exceeded.
(My device SDK is 19.)
Solution 6 - Java
For me non of the answers worked I saw here worked. I guessed that having the CPU work extremely hard makes the computer hot. After I closed programs that consume large amounts of CPU (like chrome) and cooling down my laptop the problem disappeared.
For reference: I had the CPU on 96%-97% and Memory usage over 2,000,000K by a java.exe process (which was actually gradle related process).
Solution 7 - Java
Add this to build.gradle file
dexOptions {
javaMaxHeapSize "2g"
}
Solution 8 - Java
4g is a bit overkill, if you do not want to change buildGradle you can use FILE -> Invalid caches / restart.
Thats work fine for me ...
Solution 9 - Java
Solution 10 - Java
I'm using Android Studio 3.4
and the only thing that worked for me was to remove the following lines from my build.gradle
file:
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
Because Android Studio 3.4
is using R8
in full mode
and is not direct compatible with Proguard
Solution 11 - Java
in my case, I Edit my gradle.properties
:
note: if u enable the minifyEnabled true
:
remove this line :
android.enableR8=true
and add this lines in ur build.gradle
, android
block :
dexOptions {
incremental = true
preDexLibraries = false
javaMaxHeapSize "4g" // 2g should be also OK
}
hope this help some one :)
Solution 12 - Java
At some point a duplicate copy of apply plugin: 'com.android.application'
got added to my build gradle. Removing the duplicate copy and making sure all my apply plugins were at the top fixed the issue for me.
Solution 13 - Java
I tried all the solutions mentioned above, but I was still facing the issue. Finally I stumbled upon the following which resolved the issue.
(On MacOS) Went to Preferences -> Memory Settings -> Find existing grade demon(s) -> Stopped all of them.