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

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

  咱们的项目由于代码里引入了过多的开源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
google

  目前2.3版本市场只有20%了,但愿这个占有率快速降低吧!spa

相关文章
相关标签/搜索