码迷,mamicode.com
首页 > 移动开发 > 详细

Android当代码方法超过65536个时,在2.3机器上会不能安装,出现INSTALL_FAILED_DEXOPT错误

时间:2014-09-10 17:37:30      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:android   http   io   使用   ar   strong   for   问题   sp   

今天打包时,发现2.3机器,产生的APK在某些机器上不能安装(Installation error: INSTALL_FAILED_DEXOPT),针对这个问题的一个可能解释是:最新的ADT和SDK Tool在将jar转化成dex的时候,可能会合并类的代码,这将导致巨大的类;类中的每一个方法都分配有一个id,字节码中以id标识和调用方法;早期的Dalvik VM内部使用short类型变量来标识方法的id,最大值限制在65535;综合上述因素,代码在安装的时候,不能通过验证,所以安装失败。

  我们的项目因为代码里引入了过多的开源library,所以导致方法数过多,最后只能精简代码,删除不必要的library来解决这个问题。
      最新的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

  目前2.3版本市场只有20%了,希望这个占有率快速下降吧!

Android当代码方法超过65536个时,在2.3机器上会不能安装,出现INSTALL_FAILED_DEXOPT错误

标签:android   http   io   使用   ar   strong   for   问题   sp   

原文地址:http://www.cnblogs.com/zhaipig/p/3964752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!