我以前见过不同版本的dex错误,但这一个是新的。清洁/重新启动等不会有帮助。库项目似乎完好无损,依赖项似乎正确链接。

Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

or

Cannot merge new index 65950 into a non-jumbo instruction

or

java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536

tl;dr:谷歌的官方解决方案终于来了!

http://developer.android.com/tools/building/multidex.html

只有一个小提示,您可能需要这样做,以防止在进行索引时内存不足。

dexOptions {
        javaMaxHeapSize "4g"
}

还有一个超大模式可以以一种不太可靠的方式解决这个问题:

dexOptions {
        jumboMode true
}

更新:如果你的应用程序很胖,你有太多的方法在你的主应用程序,你可能需要重新组织你的应用程序

http://blog.osom.info/2014/12/too-many-methods-in-main-dex.html


当前回答

从Libs文件夹中删除一些jar文件并复制到其他文件夹,然后进入_Project Properties >,选择Java构建路径,选择Libraries,选择添加外部jar,选择已删除的jar到您的项目,单击保存,这将被添加到引用库,而不是Libs文件夹。现在清理并运行项目。你不需要添加任何代码为多dex。这对我来说很有效。

其他回答

更新三(11/3/2014) 谷歌终于发布了官方描述。


更新2 (10/31/2014) Gradle插件v0.14.0 for Android增加了对multi-dex的支持。要启用,你只需要在build.gradle中声明它:

android {
   defaultConfig {
      ...
      multiDexEnabled  true
   }
}

如果你的应用程序支持5.0之前的Android(也就是说,如果你的minSdkVersion是20或更低),你还必须动态地修补应用程序的ClassLoader,这样它将能够从辅助索引加载类。幸运的是,有一个库可以帮你做到这一点。将它添加到应用程序的依赖项中:

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

您需要尽快调用ClassLoader补丁代码。MultiDexApplication类的文档建议了三种方法(从中选择一种最方便的方法):

1 -在AndroidManifest.xml中声明MultiDexApplication类:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        ...
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

2 -让你的Application类扩展MultiDexApplication类:

public class MyApplication extends MultiDexApplication { .. }

3 -从你的application# attachBaseContext方法调用MultiDex#install:

public class MyApplication {
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
        ....
    }
    ....
}

更新1 (10/17/2014): 正如预期的那样,在Android支持库的第21版中提供了multidex支持。你可以在/sdk/extras/android/support/multidex/library/libs文件夹中找到android-support-multidex.jar。


多索引支持解决了这个问题。Dx 1.8已经允许生成几个dex文件。 Android L将原生支持多索引,支持库的下一个版本将覆盖API 4的旧版本。

这是Anwar Ghuloum在Android开发者后台播客中提到的。我已经发布了相关部分的文字记录(和一般的多索引解释)。

完美的解决方案是与Proguard合作。正如aleb在评论中提到的。 它将使dex文件的大小减少一半。

我已经分享了一个使用custom_rules.xml构建脚本和几行代码解决这个问题的示例项目。

我在自己的项目中使用了它,它在100多万设备上运行完美无缺(从android-8到最新的android-19)。希望能有所帮助。

https://github.com/mmin18/Dex65536

你的项目太大了。你的方法太多了。每个应用程序只能有65536个方法。请看这里https://code.google.com/p/android/issues/detail?id=7147#c6

从Libs文件夹中删除一些jar文件并复制到其他文件夹,然后进入_Project Properties >,选择Java构建路径,选择Libraries,选择添加外部jar,选择已删除的jar到您的项目,单击保存,这将被添加到引用库,而不是Libs文件夹。现在清理并运行项目。你不需要添加任何代码为多dex。这对我来说很有效。