当前位置: 首页 > 知识库问答 >
问题:

Android:我的应用程序太大,并给出“无法执行dex:method ID不在[0,0xffff]:65536中”?

严昀
2023-03-14

我正在尝试将我的应用程序与Box、Dropbox和Google Drive集成。所有这三项服务都需要许多第三方JAR。此外,我的应用程序已经需要一些第三方JAR。现在,当我尝试从eclipse运行应用程序时,出现以下错误:

无法执行dex:method ID不在[0,0xffff]:65536中转换为Dalvik格式失败:无法执行dex:method ID不在[0,0xffff]:65536中

似乎发生此错误是因为我的应用程序有太多的方法。我相当确定这些方法大部分来自第三方JAR,因此试图通过简化代码来解决这一问题是不现实的。我在网上找到了这两条建议。

>

  • 添加dex。武力jumbo=true到项目。属性(并使用adt版本21)。我这样做了,但仍然得到错误。

    使用多个dex文件,如下所述:http://android-developers.blogspot.co.il/2011/07/custom-class-loading-in-dalvik.html.这似乎是唯一的选择,但我不明白它如何适用于我的情况。问题是像Drive这样的服务有太多的依赖项。这个解决方案不要求我修改驱动器源代码,以便在引用其依赖项时使用拐点吗?(这显然不是一种选择)。

    使用proGuard收缩删除未使用的代码/方法。使用proGuard导出我的应用程序确实有效,文档服务集成在

    所以,我希望在这个问题上能得到一些建议。选项2是我的案例的解决方案吗?还有另一个我应该考虑的解决方案吗?

  • 共有3个答案

    都乐逸
    2023-03-14

    Dalvik VM每个dex文件最多可以有65536个方法,因为字节码指令集无法引用需要超过16位的方法号(如@danfuzz在注释中指出的)。

    虽然可以使用多个dex文件来解决这个问题,但脸谱网发现了另一个可以在应用程序中部署的解决方案,以解决这个问题。

    湛光华
    2023-03-14

    自动包含多索引支持。从文档中:

    Android 5.0及更高版本使用一个名为ART的运行时,该运行时本机支持从应用程序APK文件加载多个dex文件。ART在应用程序安装时执行预编译,扫描类(…N)。dex文件,并将其编译为单个文件。供Android设备执行的oat文件。有关Android 5.0运行时的更多信息,请参阅介绍艺术。

    只需将Android mult-dex支持工具添加到gradle构建中:

    android {
        compileSdkVersion 21
        buildToolsVersion "21.1.0"
    
        defaultConfig {
            ...
            minSdkVersion 14
            targetSdkVersion 21
            ...
    
            // Enabling multidex support.
            multiDexEnabled true
        }
        ...
    }
    
    dependencies {
      compile 'com.android.support:multidex:1.0.0'
    }
    
    贡俊
    2023-03-14

    您还可以将其中的一个或多个开发为主应用程序的插件,以可供下载的单独APK的形式。APK将公开主应用程序将使用的一些组件——因为我不知道您与这些服务集成的性质,所以我不能对此提出更具体的建议。您将使用自己的签名级自定义

     类似资料:
    • 问题内容: 我以前见过各种版本的dex=erros,但这是新的。清理/重新启动等无济于事。图书馆项目似乎完好无缺,并且依存关系似乎已正确链接。 要么 要么 tl; dr:来自Google的官方解决方案终于来了! 只有一个小技巧,您可能需要执行此操作,以防止在进行排序时内存不足。 还有一种巨型模式可以用不太可靠的方式解决此问题: 问题答案: 更新3(11/3/2014)Google终于发布了官方说明

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

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

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

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

    • 我无法在我的应用程序中使用proguard。当我将minify启用为true时,布局屏幕中的textinputlayout工作正常,但我有一个alertdialog,其中包含一个膨胀的XML,该XML没有膨胀(该XML包含一个textinputlayout。请帮助大家。这是代码片段。 PS:我正在使用手机应用程序发帖,请不要抨击对齐不当。我真的需要帮助。 建筑渐变条目-- XML屏幕中的TextI