[Android]用架构师角度看插件化(1)-Replugin入门剖析

大家好,我系苍王。

以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。

[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表


多谢一直以来的支持,组件化的内容,应该会有一段时间不再更新,一些非常关键的技术将会在我将要出版的组件化书籍中提及。

组件化模块化的开发适合于中小型企业的业务叠加,和代码重用。而插件化的开发将组件化和模块的功能完全解耦出来。

在国内的开发环境,插件化是用户体验和开发周期的产物,我们要做的是顺应潮流,正如我组件化&模块化&插件化演进中分析一样。

Replugin,滴滴出品的VirtualApk,还有阿里出版了一本热修复框架的书籍,这些估计都足够很多人学习很久了。

这里我将挑选了一下Replugin的技术作为接下来方向的研究,将会给大家剖析他的运行过程,希望大家不腻赐教。

将会有多个章节介绍,希望大家一起进步吧。


一.Github介绍

Replugin地址(https://github.com/Qihoo360/RePlugin)


强大的介绍,希望大家都去看看起介绍,有个基础的了解吧。

其一些配置原理再这里(详细介绍


这里是当然看完了应该就对他有一个基本的了解了。

只有真正深切去了解过插件化,才明白它做到的飞跃性。


二.工程布局

下载一下源码,我们可以看到,其里面包含了五个文档。


replugin-host-gradle 是宿主gradle脚本

replugin-host-library 是宿主library源代码,我们依赖的源代码就是这个了

replugin-plugin-gradle 插件的Gradle脚本

replugin-plugin-library 插件的源代码,插件都需要依赖这个

replugin-sample 当然就是例子啦

我们看一下replugin-sample,里面包含了host宿主,还有两个plugin的的demo,这章就先研究这个例子,然后下节将会开始深入的源码介绍。



三.host宿主

首先是在build.gradle的classpath引用 gradle


然后源码中引用


然后我们需要在Application中配置

这里是动态配置Application


然后当然就是一般关心的跳转问题

这里demo1是包名,然后之后的是跳转Activity的地址


Replugin.startActivity是使用坑位跳转的,坑位在哪里声明,下一章节会介绍。

然后官网有介绍一些跳转方法,最重要是用到隐式跳转,通过包名和类跳转。


然后还有跳转Fragment的示例

这里面想要加载插件的Fragment,需要先注册Fragment整个的包名+地址名称。

然后还需要Replugin中的ClassLoader机制,而这里每个dex貌似都会有一个classloader,这个之后会介绍。

这里面loadCalss是先获取到Fragment为Class对象,然后通过asSubClass改为Fragment.clas类型,当然newInstance就是真正的创建对象了。


然后我们看一下app中,安装前需要内置插件,将插件(XXX.jar)放到assets里面,将会和app一起跟随安装,这是作为连同宿主初始时加载某些必要插件的内置安装。


我们看一下引用了replugin的gradle命令会有什么额外的编译


rpGenerateDebugBuiltinJson编译出插件的json目录


rpGenerateDebugHostConfig会显示出整个Replugin的配置


rpShowPluginsDebug命令是打印出插件版本信息。



rpGenerateReleaseBuitInJson、rpGenerateReleaseHostConfig、rpShowPluginsRelease编译出Release版本的文件


四.lib插件

我们插件还是一样需要Gradle配置



之前提及到startActivity的方式,Replugin中在插件内因为有ClassLoader是独立,使用平常的startActivity的跳转方式。而插件间使用startActivity跳转,需要使用Replugin.startActivity或者隐式跳转来完成。


而插件间的通信,Replugin是使用了aidl的方式来完成


这里需要使用远程通信来完成。Android一开始设计IBinder就是设计为跨进程间的通信的,而这里面就算插件运行为独立进程也是没问题的。


我们再看一下AndroidManifest,声明方式和平常的Android工程并无不同

值得注意的是,AndroidManifest通过meta-data来声明的。


然后看一下Lib中加载的额外的Gradle命令



运行reInstallPluginDebug来运行安装,我们看到是将其放到sdk,然后再安装

然后使用reRunPluginDebug应该是运行命令,无奈提示失败


以后修复后再给大家介绍。

如何生成内置的插件的jar文件,直接插件生成apk后缀改为apk,然后放到assets里面,宿主的gradle编译时才能识别。




总结

我们入门剖析Replugin。

(1)配置接入-接入成本最低,并不需要编写一般的占坑规则

(2)跳转效率-插件内原生跳转,插件外隐式跳转或占坑跳转

(3)插件通信-插件间通信使用aidl,这样就算插件独立进程依然通信正常。

(4)维护成本-hook点只有一个,减少最少意味着维护成本也降低

(5)加载方式-宿主内置jar和外置加载apk加载的方式

这些就是接入插件化需要估量的方面,然后深化研究代价利弊才能更加深入一步步评估出适合你们项目的插件化。

希望以后大家多多关注!下期将不会再在简书首发哦。


顺应潮流,才能试着改变潮流。

下一节将会更精彩,敬请期待!!!


这里发一条广告,我创立了一个小密圈。

每天会分享java基础,组件化插件化相关,音视频开源项目分享。最重要,带有发布者分析的点评。

还有最新插件化框架的分析和运用,组件化架构技巧的分享,都尽在这里。

不需要一顿饭的价钱 ,68/一整年的学习资料。

付费是真干货,真正节省时间的途径。

来到这里希望影响你的不只是技术提升,而且是人生的架构的导向。


已经有超过180+的小伙伴加入了我们的行列了,并且持续增加,让我们一起成长,群内还有不定时福利。



同样我的QQ群里也有很多大牛讨论和分享,群号是316556016。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值