5

我有一个大型 Android 项目,其中出现Unable to execute dex: method ID not in [0, 0xffff]: 65536错误;我相信你们中的一些人之前肯定已经经历过这个问题。这是由于应用程序中引用的方法过多而导致的错误。

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

我做了以下事情:

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

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

    @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。

谢谢!

编辑

我已经检查了如何在 MonoDevelop 中编译 MonoDroid App 时修复“OutOfMemoryError: java heap space”,但这并没有涵盖问题的原因,而且我没有使用 Xamarin Studio。

编辑2

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

4

2 回答 2

12

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

android {
    ...
    dexOptions {
        javaMaxHeapSize "4g"
    }
}
于 2015-01-19T20:21:52.007 回答
-1

在 build 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'
  }
于 2015-01-20T10:37:14.667 回答