实现MultiDex导致编译了这么久,最后heap space错误

Implementing MultiDex results in compiling for so long, and finally heap space error

我有一个大的 Android 项目,在该项目中出现 Unable to execute dex: method ID not in [0, 0xffff]: 65536 错误;我相信你们中的一些人以前肯定经历过这个问题。由于应用中引用了太多方法,因此出现错误。

我在网上寻找了不同的资源,发现 this 可能是最好的解决方案。

我做了以下事情:

  1. build.gradle.
  2. defaultConfig 块中添加了 multiDexEnabled = true
  3. 添加了以下依赖项:

    dependencies {
      compile 'com.android.support:multidex:1.0.0'
    }
    
  4. 在我的应用程序中覆盖了以下代码 class。

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
    

现在,错误消失了,但我遇到了新问题。当我 运行 应用程序时,编译器编译和 运行 应用程序花费了 3 多分钟,最后给我这个错误:

UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: Java heap space

我知道这个错误是由于内存占用过大导致的,但我不知道如何解决。我正在使用 Android Studio 1.0.2 和 Android API 21.

谢谢!

编辑:

我已经检查了How to fix “OutOfMemoryError: java heap space” while compiling MonoDroid App in MonoDevelop,但这并没有涵盖问题的原因,而且我没有使用Xamarin Studio。

EDIT2:

确切的症状是这样的:
当我编译代码时,gradle 控制台向我显示了数百条警告说 "Ignoring InnerClasses attribute for an anonymous inner class"(其他一些 Whosebug 答案表明这不是严重警告),然后只显示了一个闪烁的光标,大约一分钟后,它给了我错误。

您是否尝试过将堆大小调整添加到您的 build.gradle 文件中?例如,这会将 dexing 的最大堆大小设置为 4GB。

android {
    ...
    dexOptions {
        javaMaxHeapSize "4g"
    }
}

在构建中试试这个 gradle

android {
compileSdkVersion 21
buildToolsVersion "21.1.1"

defaultConfig {
           minSdkVersion 14 //lower than 14 doesn't support multidex
           targetSdkVersion 21
// Enabling multidex support.
           multiDexEnabled true
    }
 }
dependencies {
   compile 'com.android.support:multidex:1.0.0'
  }