美文网首页
插件化之旅1-插桩式实现支付宝接入海量应用

插件化之旅1-插桩式实现支付宝接入海量应用

作者: Laughing_G | 来源:发表于2019-08-24 15:33 被阅读0次

一、插件化定义

类似与支付宝,主界面可以看到有海量的应用,但是支付宝本身只有40M左右,插件化的好处:1.宿主和插件分开编译,并发开发;2.动态更新插件,不需要进行安装;3.按需下载模块,解决爆棚问题。
插件化的三点:1.class文件加载;2.res文件加载;3.处理插件的生命周期

二、支付宝插件的标准

支付宝接入淘票票
淘票票的Activity需要上下文context,如何解决插件的生命周期?

三、步骤:

3.1新建一个lib,用来定义插件标准接口(pluginstand)

image.png

凡是跟context相关的Activity生命周期方法,都要在PayInterfaceActivity重写:


image.png

3.2新建一个application模块,用来模拟淘票票应用

3.2.1新建一个父类BaseActivity集成Activity并实现插件的标准Activity接口,凡是引用到Context上下文的方法,都要重写,并用attach方法传进来的proxyActivity替代super关键字

image.png

3.2.2插件中的Activity都要集成BaseActivity

测试步骤1.先将taopiaopiao生成apk,放至在sdcard目录下,然后再宿主的MainActivity模拟插件apk的下载过程:


image.png

测试步骤2.宿主包新建一个PluginManager单例类,根据插件apk的路径FilePath,去找到要加载的Activity的ClassName,和对应的Activity的Resource


image.png image.png

测试步骤3.新建一个ProxyActivity类,用代理设计模式,用这个伪类去加载插件的Activity

(注意:想要加载插件的Activity,你要获取两个点1.class;2.res资源),另外跳转Activity也是先宿主先跳转到ProxyActivity,再由ProxyActivity纷发下去,比如说宿主MainActivity的已经将插件进行过一次加载了,所以我们就能通过PluginManager去拿到插件中的PackageInfo,那也就能拿到插件当中的所有Activity的className

image.png
image.png image.png

完成以上这些步骤,就能实现简单的插件Activity加载了,小伙伴们可以试一下哦

四、那么如果插件内部的activity如何跳转呢?

插件的A_Activity跳转到B_Activity,其实就是ProxyActivity再次跳转到新的ProxyActivity,所以ProxyActivity的启动模式只能是默认的stander模式。

我们上面已经讲过,插件的BaseActivity需要重写所有关于Activity的全部方法,如startActivity:


image.png

注意:上图中的that就是ProxyActivity!!!

然后ProxyActivity也要重写startActivity方法:


image.png

完成上述步骤,也就可以实现插件内部的activity跳转咯,小伙伴们再试下吧!!!

五、怎样启动插件的Service?

5.1第一步也要定义一个Service的标准PayInterfaceService

image.png

5.2第二步在插件中新建一个BaseService,集成Service并实现PayInterfaceService

image.png

六、总结

同学们,今天就先简单的介绍如何加载插件的activity和service,还有插件activity内部的跳转,附带上我的github地址,欢迎start,谢谢!!!
https://github.com/cWX411904/AliPayPluginTestOne

相关文章

网友评论

      本文标题:插件化之旅1-插桩式实现支付宝接入海量应用

      本文链接:https://www.haomeiwen.com/subject/nhgfectx.html