工作7年间,开发过的项目多达20余款,其中千万级项目班海,百万级项目课海,进行过发布会项目牛谈均属其中的代表作,在以下的项目经验介绍中就不会拿出单独的项目介绍了,而是将我进几年认为的成果简单介绍下,一个是我的框架的演变过程,另一个是针对我的框架所写的一套自动代码生成器插件。
★ 框架的演变
项目描述:
为了达到统一结构(多人开发时代码看起来像一个人写的,方便阅读)和提高开发效率的目的(将重复性的开发进行抽取封装,自定义各类控件方便团队使用,简化代码,对三方进行二次封装,以期在更换三方时不用过多修改业务层代码)。在多年的开发中逐渐形成了自己的框架:
第一阶段:框架和项目混合
缺点:1.在新开发项目时需要对框架进行抽离,耗费大量时间。
2.框架于项目耦合性强,难以有效抽离。
第二阶段:jar包引用模式
将框架封进jar,做到框架与业务层初步分离
缺点:1.无法分离资源文件
2.id索引问题极度复杂
第三阶段:SDK模式
解决了资源与项目无法分离的问题,彻底解决项目与业务层的分离,以后开启新项目只需导入SDK即可,提高了开发效率。
缺点:1.由于要维护框架,故在多项目开发时,会将框架SDK和项目都做为一个Module来使用,这样会使Project越来越大,在编译某一项目时,Studio会同步预编译整个Project,大大延长了项目编译运行时间。
2.为解决编译运行时间过长问题,则将SDK和整个Moudle拆解,使一个SDK配套一个项目Module组成一个Project,但这样加大了框架的维护难度,一处修改得处处修改。
第四阶段:现在的模式,Android studio Maven 仓库注入aar文件
优点:1.做到了一个项目一个Project,解决了Project无限增大的问题。
2.只需维护Maven仓库这一套框架,彻底与项目解耦。
技术要点:
1. Maven 本地仓库的搭建及Bintray Jcenter远程仓库搭建
2. 框架NXCommonLibrary基础库,规范了Activity、BasePresenter、BaseFragment、IBaseView、CommonAdapter、BaseApplication、Utils库等基础骨架。
3. 框架NXHttpLibrary引用到NXCommonLibrary,网络层框架,包含基本的get、post、put等网络请求、文件下载及下载上传进度回调、支持自定义缓存模式、支持https访问及自定义ssl证书、支持自定义callback,自动解析网络数据、支持数据拦截等作为核心网络层组。
4. 框架ViewLibrary组件库,自定义了各类型开发中需求有的组件。
★项目名称:plugin-代码自动生成器插件
项目描述:
当一个程序员积累了大量的代码,由一个菜鸟过渡到了一个老鸟后,他更多的会使用Ctrl+C和Ctrl+V。任何一个功能,其中固定写法的初始化控件设置产生的代码量就会占到项目的60%+,所以一般在写功能时,经常会从一个类似的功能处粘贴一份,简单的修改业务逻辑就形成了新的功能。当有一天,懒到连粘贴复制都不想的时候,开始琢磨如何让计算机帮我把这些重复固定的代码完成,构思来源于经常用的插件GsonFormat和Android Code Generator等插件。
优点:1.在团队成员频繁粘贴复制的过程中,往往一些关键性的注释不进行修改或者无用代码依然保留,这样使我的项目看起来很糟糕。所以自动生成的代码架构没有多余代码,注释完全根据自己定义好的,整体性更加优美。
2.大大加大了开发效率,只需要解决关键点业务逻辑即可。
技术要点:
1.整套插件的流程设计。
2.流程为1.自己画布局(需要初始化id的加上id,不需要的不加id。需要自动生成注释的加入注释,不需要的不永加入)2.准备好json串,3.插件解析xml布局文件,发现有id属性的会对其记录并生成初始化相关代码。4. 插件解析xml布局文件发现带注释的也会生成同样的注释,5.解析每一个带id的控件,包括(框架ViewLibrary组件库和Android原生的控件)对其固定代码生成。6.更具json自动生成JavaBean,并形成网络层Presenter代码。7.加入网络拦截,可使用本地json调试逻辑开发。8.自动生成MVP结构代码。
★项目名称:智能中央空调(蓝牙/wifi)
项目描述:
智能中央空调分为总控和分控两个部分,可通过蓝牙和wifi两种方式进行连接,总控