当前位置: 首页 > 面试题库 >

无法执行dex:方法ID不在[0,0xffff]中:65536

陆耀
2023-03-14
问题内容

我以前见过各种版本的dex=erros,但这是新的。清理/重新启动等无济于事。图书馆项目似乎完好无缺,并且依存关系似乎已正确链接。

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

要么

Cannot merge new index 65950 into a non-jumbo instruction

要么

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

tl; dr:来自Google的官方解决方案终于来了!

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

只有一个小技巧,您可能需要执行此操作,以防止在进行排序时内存不足。

dexOptions {
        javaMaxHeapSize "4g"
}

还有一种巨型模式可以用不太可靠的方式解决此问题:

dexOptions {
        jumboMode true
}

问题答案:

更新3(11/3/2014)Google终于发布了官方说明。

适用于Android的Update 2(10/31/2014) Gradle插件v0.14.0添加了对multi-dex的支持。要启用,只需在build.gradle中声明它即可:

android {
   defaultConfig {
      ...
      multiDexEnabled  true
   }
}

如果您的应用程序支持5.0之前的Android(也就是说,如果您的minSdkVersion年龄为20或更低),则还必须动态修补应用程序ClassLoader,以便它能够从辅助dexes加载类。幸运的是,有一个库可以为您完成此任务。将其添加到应用程序的依赖项中:

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

您需要尽快调用ClassLoader补丁代码。MultiDexApplication该课程的文档提出了三种实现方法(选择其中一种,最方便的一种):

1- MultiDexApplicationAndroidManifest.xml中将类声明为应用程序:

<?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- MultiDex#install通过您的Application#attachBaseContext方法进行调用:

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。

Multi-dex支持解决了这个问题。dx 1.8已经允许生成多个dex文件。
Android L将原生支持多dex,并且支持库的下一个版本将涵盖API 4之前的较早版本。

Anwar Ghuloum 在此 Android Developers Backstage播客集中对此进行了说明。我已经发布了相关部分的成绩单(和一般的多dex解释)。



 类似资料:
  • 我知道这个问题已经被问了很多次,但我有一些奇怪的问题,它在ADT v22中运行良好,但当我更新我的eclipse到v23时,我得到了这个错误 无法执行dex:method ID不在[0,0xffff]:65536中转换为Dalvik格式失败:无法执行dex:method ID不在[0,0xffff]:65536中 谢谢你的帮助 更新:问题得到了修复,当我使用Android Studio与Multi

  • 我以前见过各种版本的德克斯错误,但这一个是新的。清理/重新启动等不会有帮助。库项目似乎完好无损,依赖项似乎正确链接。 或 或 还有一种jumbo模式可以用一种不太可靠的方式来解决这个问题: 更新:如果您的应用程序太胖,并且您的主应用程序中有太多的方法,您可能需要按照 http://blog.osom.info/2014/12/too-many-methods-in-main-dex.html

  • 对于我的项目,方法计数是55K。明显低于65k限制。当我尝试在eclipse/studio中运行应用程序时 转换为Dalvik格式失败:无法执行dex:字段ID不在[0,0xffff]:65536中 我有5-6个库包含在项目中,我的应用程序也有很多功能。 在Google上,我发现许多转换为Dalvik格式的链接失败:无法执行[0,0xffff]:65536中的dex:method ID,可能存在多

  • 当我试图编译我的代码我得到这个错误总是 转换到Dalvik格式失败:无法执行dex:方法ID不在[0,0xffff]: 65536,但我不知道这是什么错误实际上我不能生成我的APK。 在我的项目中,我使用了大约4个库项目。 Facebook SDK 谷歌播放服务 聊天库 亚马逊AWS S3水桶罐 所以请浏览我的帖子,给我一些有价值的建议。

  • 我正在尝试将我的应用程序与Box、Dropbox和Google Drive集成。所有这三项服务都需要许多第三方JAR。此外,我的应用程序已经需要一些第三方JAR。现在,当我尝试从eclipse运行应用程序时,出现以下错误: 无法执行dex:method ID不在[0,0xffff]:65536中转换为Dalvik格式失败:无法执行dex:method ID不在[0,0xffff]:65536中 似