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

时间:2015-01-19 19:09:23

标签: android multidex

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

我在线查找了不同来源,发现this可能是最佳解决方案。

我做了以下事情:

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

    dependencies {
      compile 'com.android.support:multidex:1.0.0'
    }
    
  3. 覆盖了我的App类中的以下代码。

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
    
  4. 现在,错误消失了,但我遇到了一个新问题。当我运行应用程序时,编译器编译和运行应用程序需要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控制台向我展示了数百个警告,说明了#34;忽略一个匿名内部类的内部类属性" (其他一些stackoverflow答案表明这不是严重的警告),然后只显示闪烁的光标一段时间,大约一分钟后,它给了我错误。

2 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:-1)

在构建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'
  }