错误:Conversion to Dalvik format failed:Unable toexecute dex: method ID not in [0, 0xffff]: 65536
作为一名Android开发者,相信你对Android方法数不能超过65K的限制应该有所耳闻,随着应用程序功能不断的丰富,总有一天你会遇到一个异常
解决这个问题很简单,我们只需要在Project.proterty中配置一句话就Ok啦,dex.force.jumbo=true 。
是的,加入了这句话,确实可以让你的应用通过编译,但是在一些2.3系统的机器上很容易出现 INSTALL_FAILED_DEXOPT异常
至于适配2.3的系统谁还去做这种事。。。。
错误原因:(有些傻逼面试官会问的)
1、Android系统中,一个Dex文件中存储方法id用的是short类型数据,所以导致你的dex中方法不能超过65k
2、在2.3系统之前,虚拟机内存只分配了5M
这还涉及两种编程方式的学习:
一种 是以微信为代表的,将一些功能做成插件,动态加载,
另一种 方案是以facebook为代表的分包方案,将一个apk中的dex文件分割成多个dex文件,然后动态的去加载dex文件。
其实这两种方案的核心思想是一样的,插件是把未来要开发的新功能做成apk和dex动态加载,而分包方案是将已经完成的功能分成多个dex文件动态加载,其实我个人觉得插件方案比分包方案更好的解决了65k的问题,因为插件方案不仅能够解决65k问题,还能让我们的应用体积减小,而分包只能解决65k的问题。
插件发有个人写的可以学习一下:http://blog.csdn.net/yuanzeyao/article/details/38565345 .
分包发极其复杂:Android分包MultiDex原理详解
2.3版本之前dalvik虚拟机的内存只有5M,所以无论是插件方案还是分包方案在某些手机上还是会遇到该问题。
毕竟我们仅仅是减少了每个dex中包的数量,但是方法总数是没有减少的,所以解决此问题的根本方法就是修改虚拟机内存至8M,这个需求在Java层是无法实现,但是可以在c层实现,具体实现流程可以参考开源项目:
https://github.com/viilaismonster/LinearAllocFix.git
开源项目的使用方法: Hack Dalvik VM解决Android 2.3 DEX/LinearAllocHdr超限