15

我已升级到 Android Studio 2.1,但在尝试构建和运行我的公司大项目时出现此错误:

任务 ':app:transformClassesWithDexForMyAppDebug' 执行失败。com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:超过GC开销限制

我搜索了论坛并禁用了即时运行,还写信给我的 build.gradle:

dexOptions {
    incremental true
    javaMaxHeapSize "6g"
}
...
dependencies{
    compile 'com.android.support:multidex:'
}

但它并没有解决我的问题。我在我的 gradle 中启用了 multidex,因为没有它我会收到错误:

com.android.dex.DexIndexOverflowException:方法 ID 不在 [0, 0xffff] 中:65536

所以这就是它的解决方案,它以前与 Android Studio 的早期版本一起工作(也为公司中使用 Android Studio 1.4-2.0 的其他人工作)但不适合我,因为我升级了我的 Android Studio。

有谁知道什么会导致问题?

有趣的是,如果我只是制作项目,我不会得到错误,只有当我尝试运行它时。任何想法表示赞赏!

编辑1:

还有什么有趣的,如果我重新启动我的 android studio,第一次运行成功,但第二次没有。

编辑2:

如果我将堆大小设置为比应用程序更大(如 8-10g),甚至不会在第一次运行时编译。

编辑 3:

似乎问题在于即时运行,如果我强制 android studio 不使用它(例如一次部署到两个设备或更改 gradle.properties 就像答案中一样),错误就会消失。

4

4 回答 4

31

将此添加到您的gradle.properties文件中。

# The Gradle daemon aims to improve the startup and execution time of Gradle.
# When set to true the Gradle daemon is to run the build.
org.gradle.daemon=true

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true

# Enables new incubating mode that makes Gradle selective when configuring projects.
# Only relevant projects are configured which results in faster builds for large multi-projects.
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand
org.gradle.configureondemand=true

在这里找到

在我的build.gradle

....
     dexOptions
         {
               incremental false
               javaMaxHeapSize "2048M" 
               preDexLibraries = false
         }//end dexOptions

....
于 2016-04-15T10:32:02.417 回答
4

Step1:修改build.grade

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

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

Step2:在Application类上设置

public class MyApplication extends Application {

@Override
public void onCreate() {
    super.onCreate();
    MultiDex.install(this);
}

}

Step3:更改grade.properties

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

它会工作的!谢谢。

于 2016-07-20T06:58:58.510 回答
0

为特定作业设置堆大小的另一种方法是为每个作业使用环境变量。这可确保当需要更高内存的作业未使用时,内存可用。

GRADLE_OPTS="-Dorg.gradle.jvmargs=-Xms1024M -Xmx8192M -XX:PermSize=512M -XX:MaxPermSize=2048 -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8"

JAVA_OPTS="-XX:MaxPermSize=2048M"
于 2020-04-15T06:19:29.890 回答
-2
defaultConfig {
    multiDexEnabled =true
}

将此添加到应用程序的 build.gradle 文件中

于 2016-08-30T04:45:07.377 回答