Android当代码方法超过65536个时,在2.3机器上会不能安装,出现INSTALL_FAILED_DEXOPT错误
2024-09-25 16:43:47
今天打包时,发现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%了,希望这个占有率快速下降吧!
最新文章
- swift初体验
- csipsimple,linphone,webrtc比较
- jQuery最佳实践(不断更新中...)
- mac下xampp简单虚拟主机配置
- [原创] zabbix学习之旅六:如何解决zabbix server在内网,而邮件发送服务器在外网的问题
- P1026 犁田机器人
- 整合maven,jetty,jrebel进行debug调试
- openStack云平台虚拟桌面galera mysql 3节点集群实例实战
- 使用CCUserDefault 推断用户是否是第一次登陆系统及UserDefault全路径的获取
- (8) Xamarin使用Jar檔
- iPhone6 AirDrop找不到我的mac解决方法!注销mac和iPhone的icloud账号
- Python3.2.3官方文档(中文版)
- 用turtle库实现汉诺塔问题~~~~~
- 洛谷P4065 [JXOI2017]颜色(线段树)
- day12-13 文件操作b模式
- [LeetCode] 112. Path Sum ☆(二叉树是否有一条路径的sum等于给定的数)
- WDCP,LNMP安装PHP缓存加速扩展eAccelerator,xcache和memcached
- 【javascript】js中的函数节流和函数防抖
- Servlet / Tomcat / Spring 之间的关系
- selenium+python自动化87-Chrome浏览器静默模式启动(headless)
热门文章
- Sublime Text 3的安装,卸载,更新,激活
- 使用MSF生成木马_入侵Windows
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用
- 【luogu T24743 [愚人节题目5]永世隔绝的理想乡】 题解
- Storm 出现 no jzmq in java.library.path
- Python基础—12-面向对象(02)
- C#实现文件上传以及文件下载
- Qt数据库编程1
- python实现简单决策树(信息增益)——基于周志华的西瓜书数据
- STM32(7)——通用定时器PWM输出