一.前言:
目前安卓领域,插件化十分的流行,本以为这一类的文章会有很多,但是百度一搜,基本上讲的插件化都是皮毛,没有涉及到插件化原理的本身。
鉴于此,就写一系列的文章,详细的介绍其原理,并一步一步增加难度的实现方式,最终实现插件化。
当然,插件化的方案有很多很多,本系列文章讲的只是便常用的一种。
如果想完整的了解所有的插件化方案,可以参见我github的开源项目,详细的对比所有的插件化方案,供你选择最合适和自己项目的那个插件化方案。
二.目标:
本系列文章的目标并不是带你去实现一个成熟的插件化框架,而是带你一步一步的了解插件化的原理,通过对插件化的了解逐渐的加深对安卓系统源码的了解,从而更方便的去了解和改造目前市面上的那些成熟的插件化框架。
三.模块化/组件化/插件化
首先明确以下几个概念,后续文章中,统一叫插件化,我们的最终目标也是实现插件化,但是中间很多流程,还停留在组件化的范畴。
模块化:
指的是把一个大的项目拆分成若干个Module模块以及一个application模块。
组件化:
指的是在模块化的基础上,实现了动态加载。即最终打包的产物APK只包含一些基础功能,然后根据实际需求加载不同的插件APK。这些APK有可能是assets文件夹中的,也有可能是通过网络网络下载的。但是有一个前提,这些插件APK是对宿主模块有依赖关系的,并且插件APK是不能独立运行的。
插件化:
插件化和组件化最大的区别就是插件APK对宿主完全没有任何依赖关系,插件APK既可以作为一个独立APK使用,也可以作为宿主APP的一个功能来使用。
总结:
目前市场上,大多数的都属于组件化的范畴,这也和每个公司的实际需求相关的。目前的组件化的功能大都是一个APK中去承载各个业务模块,而不是承载不同的功能的APK。而这些业务模块是可以根据宿主的要求去做一些定制的。
而本系列的介绍的主要还是插件化的实现方式,即宿主对插件APK无任何要求即可加载。
四.实验环境:
本系列文章都基于安卓12的源码来讲解,验证版本包含安卓10和安卓12,其他版本暂未验证。
五.本系列文章主要分为以下篇章:
1.加载插件apk中的工具类
安卓插件化课程-第一篇:加载插件apk中的工具类https://blog.csdn.net/rzleilei/article/details/122558301
2.启动插件apk中的activity
安卓插件化课程-第二篇:加载插件apk中的activity_分享+记录-CSDN博客https://blog.csdn.net/rzleilei/article/details/122559919
3.使用插桩的方式启动apk中的activity
4.宿主中使用插件apk中的资源
安卓插件化课程-第四篇:加载apk中的资源https://blog.csdn.net/rzleilei/article/details/122577026
5.在插件中使用插件中的资源文件
安卓插件化课程-第五篇:插件中的activity使用插件中资源https://blog.csdn.net/rzleilei/article/details/122599997
6.宿主和插件中使用插件中的SO文件
安卓插件化课程-第六篇:使用插件apk中的so文件https://blog.csdn.net/rzleilei/article/details/122637880
7.解决插件中activity跳转的问题
我们宿主启动插件Activity,使用的是启动HostActivity的方式,但是插件当中的启动方式仍然是activity,所以仍然会遇到activity not found的问题,本文就是解决这个问题。