Multidex分包
热修复,插件技术。
apk文件目录结构:
--manifest.xml
--R 资源文件 drawable string等
--resource.arsc 资源的索引
--assets 资源,没id
--lib so库文件
--META-INF 签名信息
--classes.dex 代码
分包解决的问题:
andorid5.0之前Dalvik虚拟机,short字段保存一个dex里的方法数,所以最大只能到65535.
java中常见的类加载器:
纯C++实现的类加载器,没有对应的java类,主要加载jre/lib/目录下的核心库。
主要加载jre/lib/ext目录下的扩展包
主要加载CLASSPATH路径下的包。
类加载器如何加载类的:
QQ图片20190815145242.png如图,类加载器是如何加载的呢?
首先finidLoadedClass(name)方法检查这个类有没有被加载过。
有就直接返回
没被加载过就判断有没有父加载器?
有父类加载器?
类加载器是APPCalssLoader,parent是EXTClassloader,在EXTclassloader中又会调用loadClass代码如图。
所以最终都会走parent为空,调用navtive方法findBootstrapClass方法。
这样的加载机制叫做——父委托加载机制
QQ图片20190815150354.png父委托机制的优点:
提高软件系统的安全性,自己写的类即使名字和jdk里的相同,这个类不会被加载,任然加载的是jdk里面的类。
Andorid中常用的类加载器
加载/data/app目录下的apk文件,主要用来加载已经安装了的apk
加载路径需要在创建时传入,可以加载任何路径下的apk/dex/jar
gradle的两种动态加载dex
1,将DexClassLoader插入到PathClassLoader和BootstrapClassLoader中间。
2,将DexClassLoader的加载路径追加到PathClassLoader路径中
网友评论