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

你们好,我系苍王。
java

如下是我这个系列的相关文章,有兴趣能够参考一下,能够给个喜欢或者关注个人文章。git

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


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

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

在国内的开发环境,插件化是用户体验和开发周期的产物,咱们要作的是顺应潮流,正如我组件化&模块化&插件化演进中分析同样。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。

相关文章
相关标签/搜索