一、插件化相关知识
出现背景:
- app的体积越来越庞大,功能模块越来越多
- 模块耦合度高,协同开发头痛成本极大
- 方法数可能超过65535个,占用内存过大
如何解决:
- 将一个大的apk按照业务分隔成多个小的apk
- 每个小的apk既可以独立运行又可以作为插件使用
哪些优势:
- 业务模块基本完全解耦
- 高效并行开发(编译速度更快)
- 按需加载,内存占用更低等等
基本概念:
- 宿主:主APP,可以加载插件,也称为Host
- 插件:插件APP,被宿主加载的APP,可以是跟普通APP一样的apk文件
- 插件化:将一个应用按照宿主插件的方式改造就叫插件化
插件化与组件化对比:
- 组件化是一种编程思想,而插件化是一种技术
- 组件化是为了代码的高度复用性而出现的
- 插件化是为了解决应用越来越庞大而出现的
插件化与动态更新对比:
- 与动态更新一样,都是动态加载技术的引用
- 动态更新是为了解决线上bug或小功能的更新而出现
- 插件化是为了解决应用越来越庞大而出现的
相关知识:
- android ClassLoader加载class文件原理
- Java反射原理
- android资源加载原理
- 四大组件加载原理
Manifest处理:
插件类加载:
如何自定义ClassLoader加载类文件
如何调用插件apk文件中的类
资源加载:
核心技术:
- 处理所有插件apk文件中的Manifest文件
- 管理宿主apk中所有的插件apk信息
- 为每个插件apk创建对应的类加载器,资源管理器