【0157】【热修复与插件化-5】插件化
1.对插件化的认识
【说明】插件化并非是每个app必须要的,只有较大的app才会用到;
1.1 背景、概念、不同
【说明】将一个大的apk封装为一个容器,然后将各个小的apk作为插件,在用户点击的时候再加载;






1.2 几个概念的对比



1.3 插件化需要用到的知识
【说明】插件化使用到的内容和知识比较多,需要一个团队的完善;

1.4 核心文件-清单文件
【说明】清单文件记录了app中的重要的组件,
下图说明了市面上的Manifest的处理;宿主Manifest、Aar Manifest、Bundle都是具有自己的清单文件;多个清单文件最终会合并成为一个清单文件;
主要包含两项工作:
【1】文件的合并;
【2】修改整个的构件流程;

2. 模拟插件类的加载
【原理】 宿主apk已经在手机上安装好了,Android自己会加载classLoader;但是插件apk没有classLoader,需要插件化框架自定义;


2.1 Bundle类的书写

【bundle中的实例】在builde.gradle中没有任何的包的依赖;

2.2 【宿主文件的书写】
【说明】加载bundle的apk必须使用classLoader加载,但是需要将apk文件必须解压到对应的应用的data目录下;



【push相应的apk到手机指定的目录下】



3.自定义classLoader


【问】为什么插件框架必须为每个apk都书写ClassLoader呢?
【1】插件化框架会为每个每个插件都创建一个classLoader;因为android系统会为每个apk创建一个pathClassLoader;现在插件框架就是在做系统的工作;
【2】如果宿主中或者是bundle中存在相同文件名称的文件,或者是路径相同的类,没有classLoader,则只会加载一次;
4.模拟插件资源文件的加载
4.1 Android 中提供的加载资源文件的类
【说明】
【1】核心类是:AssetManager;
【2】分为两路:一个直接通过fileName加载资源文件,一类是通过Resour寻找ResourceID找到fileName,然后加载资源文件;
【3】Android本身会对宿主apk加载资源文件;因此框架需要自己书写资源加载类;

4.2 通用框架加载资源文件的方法

4.3 插件化的核心技术

4.4 模拟插件化

【插件管理类】单例类
[构建单例模式]


[dexClassLoader]类加载器


[创建资源管理器]需要用到反射

[插件的管理类]

【初始化插件信息】需要获取插件的path,然后初始化info;

【保存加载过的插件的信息】使用HashMap保存加载过的插件的信息


5.小结

浙公网安备 33010602011771号