解决“Cannot merge new index 67208 into a non-jumbo instruction”的问题

在将ADT和SDK Tool升级到最新(分别是21.1和16.0.1)之后,我的一个工程(相对比较大)在编译并运行的时候,出现错误,Eclipse控制台输出如下信息:

Unable to execute dex: Cannot merge new index 67208 into a non-jumbo instruction!
      Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 67208 into a non-jumbo instruction!

很多人在升级ADT和SDK Tool之后,都会遇到这个问题,只是错误信息中的数字不同而已。

而且,我还发现一个现象:如果只是编译,但不生成APK,并不会出错;其实,从上面的错误信息中也可以看出一些线索 --- 它是在将jar文件转换成dex文件的时候出错的。

网上给出的解决方案是,将dex.force.jumbo=true添加到project.properties文件中,然后清理工程,并重新编译。

这个方法可以解决编译阶段问题,但是产生的APK在某些机器上不能安装(Installation error: INSTALL_FAILED_DEXOPT),针对这个问题的一个可能解释是:

最新的ADT和SDK Tool在将jar转化成dex的时候,可能会合并类的代码,这将导致巨大的类;类中的每一个方法都分配有一个id,字节码中以id标识和调用方法;早期的Dalvik VM内部使用short类型变量来标识方法的id,最大值限制在65535;综合上述因素,代码在安装的时候,不能通过验证,所以安装失败。

最新的Android可能已经解决了这个问题,但是更早的Android版本可能仍然存在此问题。

因此,由于大量遗留机器的存在,这个问题是不能彻底解决的,一个临时的解决方案是:删掉没有实际使用的代码,或者使用ProGuard处理代码(可以减小代码体积)。

一个不幸的推论是:随着一个软件功能的增加,代码的膨胀,APK包终将超出可以处理的范围,也许就是8M(指APK包里面的classes.dex).

与此问题相关的两个讨论组是:

https://code.google.com/p/android/issues/detail?id=40409

https://groups.google.com/forum/?fromgroups=#!topic/adt-dev/tuLXN9GkVas

时间: 2024-11-10 15:44:37

解决“Cannot merge new index 67208 into a non-jumbo instruction”的问题的相关文章

Android-Cannot merge new index 66195 into a non-jumbo instruction的解决的方法

转载请注明来源:http://blog.csdn.net/goldenfish1919/article/details/33729679 用eclispe打包的时候报错: [2014-06-23 13:44:35 - Dex Loader] Unable to execute dex: Cannot merge new index 66195 into a non-jumbo instruction! [2014-06-23 13:44:35 - tao_apad_2.0] Conversion

项目中用了汉字正则表达式,出现异常:Cannot merge new index 65993 into a non-jumbo instruction

在项目中用了汉字正则表达式,编译并运行,Eclipse控制台输出如下异常信息: Unable to execute dex: Cannot merge newindex 65993 into a non-jumbo instruction!? Conversion to Dalvikformat failed: Unable to execute dex: Cannot merge new index 65993 into anon-jumbo instruction! 解决方法: 将dex.f

Dalvikvm method_id 长度限制(方法量限制)Cannot merge new index 66212 into a non-jumbo instruction。

错误描述: 编译时报错:Cannot merge new index 66212 into a non-jumbo instruction. 错误原因: Dalvik 对 method_id 由一个 short int(2个字节)标识. ,一旦工程方法数超过64k method_id溢出,导致无法编译. 解决方式: 以上问题出现在 SDK tools 21(以前会出现此错误)升级 sdk 之后 将工程文件project.properties中 添加 dex.force.jumbo=true,就可

空间索引网格大小无效的解决方法The spatial index grid size is invalid

原名引至:http://www.cnblogs.com/linhugh/archive/2012/07/24/2606439.html 之前在做shp数据导入Geodatabase中时,程序运行出现错误提示:“The spatial index grid size is invalid”. 后来查阅esri帮助找到了原因.是LoadOnlyMode的问题.记下来,以后好好研究. http://support.esri.com/en/knowledgebase/techarticles/detai

Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 69457 into a non-jumbo instruction!

在project.preperties页面添加 manifestmerger.enabled=truedex.force.jumbo=true

C# 解决Datagridview 删除行后index改变的问题

for (int i = 0; i < dataGridView1.Rows.Count; i++) //删除行后 count值会改变 { DataGridViewRow row = dataGridView1.Rows[i]; dataGridView1.Rows.Remove(row); i--; //所以这里要把i的值--.这句是关键.. }

git提交过程中遇到的 index.lock 问题导致无法提交的解决方法

在提交代码的过程中,可能会遇到下面的问题: fatal: Unable to create 'C:/programLists/zzw-q1/.git/index.lock': File exists. If no other git process is currently running, this probably means a git process crashed in this repository earlier. Make sure no other git process is

Git merge 冲突解决简明教程

目录 1.????概述????1 2.????从git difftool & mergetool 工具开始 – Beyond Compare????1 2.1.????下载安装Beyond Compare????1 2.2.????创建启动Beyond Compare脚本????1 2.2.1.????创建git-difftool-bcomp-wrapper.sh????2 2.2.2.????创建git-mergetool-bcomp-wrapper.sh????2 2.3.????设置环境变

关于Git无法提交 index.lock的解决办法(学)

今天提交代码时,在一次提交,莫名其妙没成功后,再次用git commit -a命令时,出现以下错误,无论是用git还是TortoiseGit都会出现以下这个问题.. $ git commit -a fatal: Unable to create 'e:/git/Android/XXXXXX/.git/index.lock': File exists. If no other git process is currently running, this probably means a git p