插件式开发想要解决的问题
1.解耦
2.动态升级,减少发版
3.高效开发,编译速度快
现在市面上的插件式开发有很多种,实现原理也不相同,下面对其中的Dynamic_load_apk这个开源框架进行分析,看它是如何实现在插件apk未安装的情况下实现对未安装的插件apk组件的生命周期管理,资源的调用等问题
加载插件源码分析
1.检查本地插件版本是否合法,不合法删除
2.如本地无插件或插件版本不合法,从assets中拷贝 (.so --> .apk)
3.检查从assets中拷贝的插件版本是否合法,不合法删除
4.检查插件更新,有插件更新,下载新插件
5.加载插件,创建插件需要的环境
那么准备插件运行环境中主要做了哪些操作呢?
准备插件运行环境 创建DexClassLoader 用反射方式拿到Resource进而实现对插件资源文件的调用 创建DLPluginPackage那么如何启动插件的Activity并且管理它的呢,原理很简单,就是使用一个代理Activity去代理执行插件Activity(其实就是一个普通的java类,没有系统上下文管理它)
启动插件Activity实际是启动一个代理Activity 获取代理Activity的class代理Activity中持有DLProxyImpl实例,在代理Activity的onCreate方法中调用它的onPreCreate方法用反射方法创建插件Activity实例并绑定到代理Activity中,这样在系统管理代理Activity的时候,代理Activity就可以同时调用插件Activity的生命周期方法,打到系统管理的效果
插件的开发需要遵循一定的约束,比如:
Activity需要继承自DLBasePluginActivity
使用that代替this使用,因为插件Activity只是一个普通的java类,并没有上下文
插件在开发中需要使用到的公共类库中方法,在插件gradle中使用provided提供编译支持,但是不打包进入apk中
这个插件式开发框架的设计是非常巧妙的了代理方式,同样的思路可以实现插件中使用service
在不同的阶段用不同的技术方案插件话方案不适合小公司或者创新项目,并且目前React Native的崛起,可能以后插件式开发会被React Native所代替
网友评论