Android 分包 MultiDex 策略总结】的更多相关文章

1.分包背景 我们在Android开发中,会不断的在App代码里面增加新功能,引入新的类库,如果不加控制的话,那么会碰到编辑器IDE爆出一下错误: Error:Execution failed for task ':ttt:transformClassesWithDexForDebug'. com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: jav…
MultiDex的产生背景 当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt.DexOpt的执行过程是在第一次加载Dex文件的时候执行的.这个过程会生成一个ODEX文件,即Optimised Dex.执行ODex的效率会比直接执行Dex文件的效率要高很多. 但是在早期的Android系统中,DexOpt有一个问题,DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面.但是这个链表的长度是用一个short类型来保存的,导致…
转载请标明出处:http://blog.csdn.net/shensky711/article/details/52845661 本文出自: [HansChen的博客] 概述 Android开发者应该都遇到了64K最大方法数限制的问题,针对这个问题,google也推出了multidex分包机制,在生成apk的时候,把整个应用拆成n个dex包(classes.dex.classes2.dex.classes3.dex),每个dex不超过64k个方法.使用multidex,在5.0以前的系统,应用安…
对于功能越来越复杂的app的两大问题 问题一:当项目越来越大,方法数超过65536,编译时会出错(为什么是65536,参考下面关于dexopt对方法id检索存储介绍),这个所说的方法数包含用到的框架,依赖的jar包,当然还有我们应用本身的代码中的所有方法(我们自己写的). 我们可以写个Demo看看报的具体错误. 那我们写个65536以上个方法,可以用Java的IO流向一个txt里写入65537个方法. public class MethodWriter {public static void m…
如果App引用的库太多,方法数超过65536后无法编译.这是因为单个dex里面不能有超过65536个方法.为什么有最大的限制呢,因为Android会把每一个类的方法id检索起来,存在一个链表结构里面.但是这个链表的长度是用一个short类型来保存的,short占两个字节(保存-2的15次方到2的15次方-1,即-32768~32767),最大保存的数量就是65536.新版本的Android系统中修复了这个问题,但是我们仍然需要对低版本的Android系统做兼容. 解决方法有如下几个:1.精简方法…
http://blog.csdn.net/silenceburn/article/details/6083375 ===========================================     如有错漏请不吝拍砖指正,转载请注明出处,非常感谢 有一个问题,在网上被频繁的问到,就是为什么自定义的Receiver总是无法接收到SD卡插拔的事件. 而此问题大部分情况下可以通过增加一句代码解决: filter.addDataScheme("file");  // filter是…
前天准备发包了,测试完毕,打好正式签名包,装到手机上,运行不起来. 网上查了大量资料,都没有解决方案. log显示如下: 04-26 10:07:57.727 1538-1538/? I/MultiDex: VM with version 2.1.0 has multidex support04-26 10:07:57.728 1538-1538/? I/MultiDex: install04-26 10:07:57.728 1538-1538/? I/MultiDex: VM has mult…
Android利用ant手动打包 首先我们要给自己的IDE eclispe配置ant,默认的eclipse是集成了ant构建工具的,但是google提供的Android集成开发工具ADT,里面封装了Eclipse,但是很奇怪的是竟然没有Ant插件在里面标准的Eclipse一般都是内置集成了Ant的.然后我们到eclipse的plugins目录下查看了,其实是有安装ant插件的,但是没有在界面体现出来.要让Eclipse在界面显示Ant的相关配置,可在命令行下作如下操作: $ cd <your e…
今天介绍下策略模式,直接先上UML图 策略模式的概念 The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.–(翻译)– 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换.策略模式使得…
当一个app的功能越来越复杂,代码量越来越多,也许有一天便会突然遇到下列现象: 1. 生成的apk在2.3以前的机器无法安装,提示INSTALL_FAILED_DEXOPT 2. 方法数量过多,编译时出错,提示: Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536 出现这种问题的原因是: 1. Android2.3及以前版本用来执行dexopt(用于优化dex文…