-
模块化:项目按照独立的模块进行划分
-
组件化:将项目按照单一的组件来进行划分结构
模块化与组件化的差别在于颗粒度,个人认为模块相对于组件的粒度较大!组件分的更细。一个模块可以由很多个组件构成~
-
热修复:当线上应用出现紧急BUG,为了避免重新发版,并且保证修复的及时性而进行的一项在线推送补丁的修复方案。
-
热更新:与热修复同义!
-
插件化:一个程序划分为不同的部分,以插件的形式加载到应用中去,本质上它使用的技术还是热修复技术,只是加入了更多工程实践,让它支持大规模的代码更新以及资源和SO包的更新。
模块化&组件化
个人感觉模块化和组件化无非就是业务和基础支撑库拆分粒度的区别。
当项目越来越复杂,体积也变得臃肿,代码量激增,各个模块相互引用导致耦合性很高。
并且各个模块无法单独开发调试以及测试
无法快速剥离组件开发新应用
…
基于以上问题:模块化(组件化)是比较好的解决方法!
项目组件化的重要环节在于,将项目按照模块来进行拆分,拆分成一个个业务module和其他支撑module(lib),各个业务module之间互不依赖,互相解耦!
每个业务module都可以安排不同的开发人员团队来进行开发,不强制使用一种开发模式,MVP可以,MVC也可以!
然后各个业务module之间通过路由机制进行跳转和传递!
所以重点就是两点:
-
分模块
-
路由机制
关于组件化更详细的内容请移步:Android组件化开发实践
模块化和组件化都是一种开发模式,并没有设计太高深的技术。但是后面要说的插件化、热更新、热修复等技术就不是那么简单了!
Android开发最前沿的技术当真属于热修复和插件化了,目前已被大部分一线互联网公司所采用
极大的提高了应用的稳定性,增强了用户体验
http://blog.csdn.net/luzhenyuxfcy/article/details/52669971?locationNum=5
插件化
-
Atlas
-
DroidPlugin
-
http://blog.csdn.net/wangbaochu/article/details/50518536
https://juejin.im/entry/57b2833a0a2b58006334e73a
https://juejin.im/entry/57d746dbd20309006a0b168e
https://juejin.im/entry/583bb48c61ff4b006cbf091b
https://juejin.im/entry/58ad2730570c35006bcde6fb
热修复
(图片转自网路)
相信大部分APP软件的开发流程都是上面那样。
版本上线之后,用户或者市场反馈说有bug,然后立马加班紧急修复,接着又发布版本上线;然后又反馈回来说有新的bug,好嘛,接着修复然后发新版本上线;这样一直修复bug发版本上线……
虽然软件的bug避免不了,但是总是发布新版本,让用户去下载更新使用,会让很多用户失去耐心和信息。严重影响用户使用和体验,代价是很大的!
-
Andfix
-
Hotfix
-
Tinker
-
QFix
-
Amigo
-
Robust
-
Sophix
从某种概念上说,提到的几个热更新热修复什么的,就干一件事情,替换。当替换的东西属于大块内容的时候,就是模块化了,当你去替换方法的时候,叫热更新,当你替换类的时候,加热插件,而且重某种意义上讲,所有的hot方案,都是一种热插件,因为hot方案为的就是在app之外去干这个事。就这么简单的理解。无论是替换一个类,还是一个方法,都是在干替换这件事请。。这里的替换,也算是几种hook操作,无论在什么代码等级上,这种侵入性操作,就是不可否认的hook。
既然要做替换,承前启后是关键。借助对 MultiDex,InstantRun中得到的思考,和理解,大部分的hot框架,最后新的APK往往就是在这里找的灵感和实现,.当然,这里还有native的技术。