Android Studio 1.0在dexDebug或dexRelease上构build失败

我最近从Android Studio 0.9.2升级到1.0(包括版本1.0.0的Gradle插件),我在构build项目时遇到了问题。

每当我build立我在dexDebug或dexRelease步骤得到以下exception:

UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.HashMap.createEntry(HashMap.java:897) at java.util.HashMap.addEntry(HashMap.java:884) at java.util.HashMap.put(HashMap.java:505) at com.android.dx.rop.type.Type.putIntern(Type.java:857) at com.android.dx.rop.type.Type.intern(Type.java:365) at com.android.dx.rop.type.Type.internClassName(Type.java:415) at com.android.dx.cf.cst.ConstantPoolParser.parse0(ConstantPoolParser.java:289) at com.android.dx.cf.cst.ConstantPoolParser.parse0(ConstantPoolParser.java:299) at com.android.dx.cf.cst.ConstantPoolParser.parse(ConstantPoolParser.java:150) at com.android.dx.cf.cst.ConstantPoolParser.parseIfNecessary(ConstantPoolParser.java:124) at com.android.dx.cf.cst.ConstantPoolParser.getPool(ConstantPoolParser.java:115) at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:482) at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) at com.android.dx.command.dexer.Main.processClass(Main.java:704) at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673) at com.android.dx.command.dexer.Main.access$300(Main.java:82) at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602) 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:632) at com.android.dx.command.dexer.Main.processAllFiles(Main.java:505) at com.android.dx.command.dexer.Main.runMultiDex(Main.java:332) at com.android.dx.command.dexer.Main.run(Main.java:243) at com.android.dx.command.dexer.Main.main(Main.java:214) at com.android.dx.command.Main.main(Main.java:106) 

我尝试将Android Studio的堆大小增加到-Xmx4096m但无济于事。 在Android Studio 0.9.2中,版本0.14的gradle插件构build工作正常。

这是我的项目的build.gradle文件:

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.0.0' } } 

这是我的模块的build.gradle文件:

 apply plugin: 'android' repositories { mavenCentral() } dependencies { compile 'com.android.support:appcompat-v7:21.+' compile 'com.android.support:cardview-v7:21.0.+' compile 'com.android.support:recyclerview-v7:21.0.+' compile 'com.android.support:multidex:1.+' compile 'com.google.android.gms:play-services:6.5.+' compile 'org.jsoup:jsoup:1.8.+' compile 'commons-io:commons-io:2.4' compile 'org.apache.commons:commons-lang3:3.3.2' compile 'com.rometools:rome:1.5.0' compile 'com.google.apis:google-api-services-blogger:v3-rev44-1.19.0' compile 'com.google.http-client:google-http-client-gson:1.19.0' compile 'org.apache.commons:commons-collections4:4.0' compile 'com.parse.bolts:bolts-android:1.1.2' compile files('libs/android-query.0.26.8.jar') compile files('libs/Parse-1.7.1.jar') } android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { // Enabling multidex support. multiDexEnabled true minSdkVersion 10 targetSdkVersion 21 versionCode 1040009 versionName "1.4" } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-dcrapp.txt' shrinkResources true } debug { minifyEnabled false shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-dcrapp.txt' } } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } //Bugfix for Gradle build bug packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } // Move the tests to tests/java, tests/res, etc... instrumentTest.setRoot('tests') // Move the build types to build-types/<type> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... // This moves them out of them default location under src/<type>/... which would // conflict with src/ being used by the main source set. // Adding new build types or product flavors should be accompanied // by a similar customization. debug.setRoot('build-types/debug') release.setRoot('build-types/release') } } task copyMappingFiles(type: Copy) copyMappingFiles { from 'build\\outputs\\mapping\\release' into 'mappings\\'+android.defaultConfig.versionCode include('mapping.txt') } assembleRelease.finalizedBy copyProguardFiles 

这个问题的原因是什么?如何解决?

看起来像Android Studio的内存不足,请尝试增加AndroidStudio.app/Contents/bin/studio.vmoptions中的内存大小

 -Xms256m -Xmx1024m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=96m -XX:+UseCompressedOops 

根据Android Studio中的答案build议- 如何增加分配的堆大小

另外你可能想添加

 dexOptions { javaMaxHeapSize "4g" } 

根据Android Studio Google JAR文件导致您的模块build.gradle 导致GC开销限制超出错误

看起来像德兴耗尽的记忆。 尝试:

 android { dexOptions { javaMaxHeapSize "2048M" } } 

有关其他选项,请参阅Gradle插件用户指南中的dex选项 。