美文网首页
Android插件化小Demo

Android插件化小Demo

作者: xclh | 来源:发表于2019-04-05 17:05 被阅读0次

    今天梳理了下插件化的知识,做了个小Demo,首先梳理下类加载的原理~

    类加载原理

    在Android中类的加载是通过ClassLoader来完成,具体来说就是PathClassLoader 和 DexClassLoader 这两个Android专用的类加载器,这两个类的区别如下:

    PathClassLoader:只能加载已经安装到Android系统中的apk文件,是Android默认使用的类加载器,类结构如下。

    DexClassLoader:可以加载任意目录下的dex/jar/apk/zip文件,类结构。

    从上面可以看出,他们各自的类本身并没有做什么工作,知识有个构造函数而已,证明全在他们的父类实现的方法,而这两个类都是继承自BaseDexClassLoader,那我们来看下这个类干了什么:

    好吧,看来还得进一步进去看看~我们到ClassLoader里面看看,这个时候我们在这个类里面找到了这个方法~loadClass:

    首先进来,先检查父加载器是否加载了这个类,没有加载,请求父类加载,父类又检查他的父类是否加载了这个类,直到顶层,BootClassLoader,此时如果没有加载,从顶层一步一步加载,直到都没有加载成功,调用自己的findClassf方法加载。(注意,这里的父不是他们真正的父类,这里主要是双亲委托机制的使用,在这种机制下,一个Class只会被加载一次)。这样,这个类就加载完成了。

    这里需要明白的一点是对于一个ClassLoader(类加载器)来说,将一个具体的类(class)加载到内存中其实是由虚拟机完成的,对于开发者来说,我们关注的重点应该是如何去找到这个需要加载的类

    好啦,这个小Demo如下

    项目结构如下:

    operationapk 是个model,用于生成插件的,我们来看下AlgorithmTest的借口实现类,主要是我们需要在自己app内调用的方法

    看出来了,主要就是加减乘除。。。

    ok,我们使用as的Buile-->Build Bundle -->Build APK 直接生成我们需要的apk文件,

    接下来我们直接把这个文件放到我们的手机上去

    此时这个apk文件已经放到我们手机的Demo目录下啦~

    接下来就需要使用我们的类加载器DexClassLoader ,它是继承BaseDexClassLoader--》ClassLoader

    他有四个参数的构造

    第一个参数就是dex,apk,zip,jar文件的路径~,也就是我们刚刚push到手机的位置,第二个参数是我们把这个文件解析后放置的位置,

    第三个就是so文件之类的了,最后一个为parent加载器

    然后使用反射,注意这里的loadClass使用的是包名加类名

    此时,我们就根据反射的知识,去调用方法就行了哦~

    好吧,这里这个小Demo就完成了

    相关文章

      网友评论

          本文标题:Android插件化小Demo

          本文链接:https://www.haomeiwen.com/subject/mmfkiqtx.html