背景:
公司项目之前eclipse环境下开发的,由于早起没有架构师规划项目存在很多问题,
1、代码没有解耦,好多代码项目之间强引用耦合在一起。
2、重复代码甚多,相同功能多次开发,冗余代码多。
3、项目无统一代码规范,复用难度大。
4、第三方框架引用多,大部分没有二次封装,升级维护难度大。
5、项目体谅大在eclipse环境下出现65535问题。
解决方案:
经过讨论,选出两个方案,方案一是实现插件化,不仅解决65535问题而且还能具备热更新功能。但是由于代码哦呵程度高执行起来风险大所以选择第二套方案;项目组件化。
首先将项目转移到Android studio上面,然后通过gradle项目配置完成组件开发架构。
组件化与插件化:
插件化:通过热部署apk、jar、dex等插件文件来合并代码,主流的方式有代理模式或者通过反射hock系统关键流程。
组件化:通过gradle项目配置,进程通讯、全局路由来整合组件项目,组件化相对插件化风险小,稳定性高。插件化则是具备热部署的主要特性,每个插件都是独立项目。
插件化和组件化是两个不同的概念,但是两者也是不矛盾并且两者是可以协同使用,因为某种层面上你的项目想实现插件化必须先实现组件化。
项目结构:
项目工程
|-壳工程 module (由于有个转换的过程,将原主工程作为壳工程,后期将没有业务代码,只是用来管理其他组件)
|-业务组件一 module
|-业务组件二 module
..................... ///这里省略,可以添加任意多业务组件
|-公司sdk工程 library(主要包括公用类库、第三方库等等)
最后实现组件gradle项目配置:
组件化配置起来是比较容易的。上面描述了其实我们最终发布的还是一个完整app,只是在开发的时候实现独立module开发。所以只要配置gradle来实现module和library来换切换。
在壳工程gradle配置:
def isDev = IS_DEV_TAG.toBoolean()
if (!isDev) {
compile project(':plugin_module:rspluginmodule')
compile project(':plugin_module:RsBlHomepage')
compile project(path: ':BLVip')
}
上代码表示只有发布时候才引入作为library组件。在对应的组件gradle中配置:
if (isDev){
apply plugin: 'com.android.application'
}else {
apply plugin: 'com.android.library'
}
.................
if (isDev){
applicationId packageName
}
主要用来实现module library 切换。
那么就可以通过上面的全局变量IS_DEV_TAG 来实现发布模式和组件开发模式切换。