【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.小结

posted @ 2018-05-18 16:01  OzTaking  阅读(328)  评论(0)    收藏  举报