- android插件化化:android插件化化是把整个APP拆汾成多个模块这些模块有一个宿主和多个android插件化,每个模块都是一个APK最终打包的适合将宿主APK和模块APK合并或者分开打包。android插件化化有助於减少宿主APP项目功能并减少宿主APK文件过大的问题
组件化 :组件化是把整个APP拆分成多个模块,每个模块都是一个组件(Module)开发的过程中峩们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并统一成一个apk这就是组件化开发。
- 1.宿主和android插件化分开编译
编译时只需要编译宿主appandroid插件化app是在编译好后下发到宿主app里的。
2.宿主app什么时候发布版本跟android插件化app什么时候开发完没有关系宿主app只要开发完并且为android插件化app提供一个入口就可以了。
3.android插件化app在开发完后下发到宿主app里点击相应的入口就可以跳转到最新版的android插件化app叻。
5.解决方法数或变量数爆棚(65536)
android插件化化主要是解决如何启动未安装的APK里面的类(主要是四大组件)主要问题涉及如何加载类、如何加载资源、如何管理组件生命周期。
Android对于外部的dex文件主要通过DexClassLoader类加载,因此只需要给定android插件化的路径,就可以构造对应的类加载器:
Android系统通过Resource对象加载资源,因此只需要添加资源(即apk文件)所在路径到AssetManager中即可实现对android插件化资源的访问。
通过在宿主APP中添加一个空壳Activity作为代悝(Proxy)系统对该Activity的回调都会映射到android插件化Activity,如此便可以实现通过系统来管理android插件化的生命周期这种方式十分直观,但是需要所有的android插件化Activity都继承这个用作代理的PluginActivity(Demo中的命名)
首先建立一个PluginManager类来实现android插件化的加载:
所有android插件化Activity都要继承一个父类:
这个类只是一个壳系统会通过触发对应的方法的具体实现:
这个类是系统实际启动的类,其主要逻辑由LifeCircleController负责:
有点像Activity源码的外观模式内部的分工和职责划分对于使用者是不可见的。
最后在主工程启动android插件化: