MultiDex
2016-11-03 16:06:36 0 举报
MultiDex是Android支持库的一部分,它允许应用程序在运行时使用超过64K的方法。当您的应用程序依赖的库和方法数量超过这个限制时,您需要使用MultiDex来解决这个问题。要使用MultiDex,您需要在您的项目中实现一个Dex分包策略,并在清单文件中声明它。这通常涉及到将您的应用程序代码和库代码分离到不同的dex文件中,以便它们可以同时加载到设备上。MultiDex还提供了一些工具和类,帮助您管理多个dex文件之间的依赖关系和资源。总之,MultiDex是一个强大的工具,可以帮助您构建大型、复杂的Android应用程序,而不必担心方法数的限制。
作者其他创作
大纲/内容
把加载得到的elements扩展到dexPathList的dexElements字段上
Y
创建第dex存储路径,如果失败则创建第二存储路径
扩展ClassLoader的path、mPaths、mFiles、mZips、mDexs等字段
从apk中解压次dex文件到dex路径
加载dex过程的核心都是获取该dex文件的DexFile对象,创建DexFile对象过程中会调用Native方法加载dex文件并进行dexopt处理,同时产出一个opt过的dex文件放在dex存放路径(这是耗时多的两处之一,另一处是解压提取dex文件的时候),下次加载dex文件优先使用该文件。ClassLoader加载类的时候,核心也是通过其DexFile列表的每一个DexFile对象的defineClass去加载类,最终也是到Native里面去。
提示MultiDex可能出错
N
dex文件是是否正确?
开始
获取以前已解压好的dex文件
系统是否支持MultiDex?
通过反射调用pathList的makeDexElements方法加载解压出来的dex文件(V4、V19的参数不同)
解压dex
SDK 20?
根据SDK使用对应的V4/V14/V19加载dex文件
判断apk文件是否被修改过?
通过反射获得APP的ClassLoader实例的pathList字段
开始加载
使用SP保存dex和apk信息
成功?
MultiDex#install(Contex)
获取刚刚解压的dex文件
通过反射获得APP的ClassLoader实例的path字段
结束
加载dex
V4
清除第二存储路径上的dex文件
只尝试一次
调用DexFile#loadDex加载每一个dex文件
V14、V19
0 条评论
回复 删除
下一页