实现MultiDex会导致编译这么长时间,最后导致堆空间错误

tec*_*yle 5 android android-multidex

我有一个很大的Android项目,我得到了无法执行dex:方法ID不在[0,0xffff]:65536错误; 我相信你们中的一些人之前肯定经历过这个问题.由于应用程序中引用的方法太多,这是一个错误.

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

我做了以下事情:

  1. 添加multiDexEnabled = truedefaultConfig的build.gradle.
  2. 添加了以下依赖项:

    dependencies {
      compile 'com.android.support:multidex:1.0.0'
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 覆盖了我的App类中的以下代码.

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
    
    Run Code Online (Sandbox Code Playgroud)

现在,错误消失了,但我遇到了一个新问题.当我运行应用程序时,编译器需要超过3分钟来编译和运行应用程序,最后给我这个错误:

UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

我理解这个错误是由于大量内存使用而发生的,但我不知道如何解决它.我使用的是Android Studio 1.0.2和Android API 21.

谢谢!

编辑:

我已经在MonoDevelop中编译MonoDroid应用程序时检查了如何修复"OutOfMemoryError:java堆空间",但是这并没有解决问题的原因,而且我没有使用Xamarin Studio.

编辑2:

确切的症状是这样的:
当我编译代码时,gradle控制台向我展示了数百个警告,说"忽略匿名内部类的InnerClasses属性"(其他一些stackoverflow答案表明这不是严重的警告),然后显示什么但闪烁的光标暂时一段时间,大约一分钟后,它给了我错误.

Rob*_*kic 11

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

android {
    ...
    dexOptions {
        javaMaxHeapSize "4g"
    }
}
Run Code Online (Sandbox Code Playgroud)