Android插件框架机制
随着功能的增加,APK的体积也在不断增长,我们可以通过MultiDex方案来解决方法数的64K限制问题,但是随着APK的体积增加,APK启动的速度也会收到影响。
为了解决这个问题,我们引入插件框架的概念。插件框架的基本形式是将一个APK中的不同功能模块进行拆分,并打入到不同的dex文件或者APK文件中,主工程只是一个空壳,提供了用来加载模块dex或者APK的框架。
使用插件框架的好处
1 . 提升Android Studio工程的构建速度:每个模块作为一个独立的插件进行开发和调试,Android Studio只需要加载对应的模块和依赖库即可;
2 . 提高应用的启动速度:引入插件框架以后,应用启动时可以选择只加载必需的模块,其他非必须模块可以在使用到的时候再进行加载;
3 . 支持多团队开发;
4 . 在线动态加载或者更新模块;
5 . 按需加载不同的模块,实现灵活的功能配置;
基本概念
宿主和插件
宿主APK实现了一套插件的加载和管理的框架,它作为应用的主工程存在,插件APK都是依托于宿主APK而存在的;
插件APK是每个独立的功能模块,可以通过在线配置和更新实现插件APK在宿主APK中的上线和下线,以及动态更新等功能;
ClassLoader机制
Android中的ClassLoader机制主要是用来加载dex文件,系统提供了两个API可供选择:
1 . PathClassLoader:只能加载已经安装到Android系统中的APK文件,因此不符合插件话的需求;
2 . DexClassLoader:支持加载外部的APK、Jar、dex文件,正好符合插件化的需求。所有的插件化方案都是使用DexClassLoader来加载插件APK中的.class文件的;