架构模式
- 传统架构:单一App工程,所以的代码都往一个工程里面累计,代码量指数级膨胀,编译时间长;业务逻辑和基础功能模块耦合度太高,代码复用性为0.
- 模块化工程架构:最上层是宿主层APK,不存放任何的逻辑,是一个空壳子,唯一作用就是对外产生一个APK。第二层是业务组件层,包含首页业务,登录业务,搜索业务,详情业务。第三层是通用业务组件,是一个公司APP所有都通用的东西,最下层是功能组件,与任何业务逻辑都没有关系。每个层分层情况非常清楚,如果要形成一个新的App分厂迅速的,宿主层基本可以复用,只需要改一下包名即可。基础业务组件和功能组件基本可以复用,只需要更换一下业务代码即可。
- 企业级组件化架构:模块化的主要一个缺点就是业务层的强依赖,导致工程的强耦合。组件化和模块化没有什么太大的区别,主要求别就是业务组件层的路由化改造,解耦业务模块之间的强耦合,工程的可扩展性大大提高。
项目需求分析
需求分析
App的主页主要有我的,发现,朋友这三个功能模块,在我的这个功能模块中主要存放与用户相关的数据。而发现是一个Fragment的列表,可以实现加载更多和下拉刷新。朋友这个页面主要包含列表的下拉刷新。菜单栏,加载侧滑菜单,可以点击立即登录跳转到登录功能,登录完成再次回到主页,同时刷新我们的用户信息,点击搜索会跳转到搜索页面,点击下面的底部菜单栏会跳转到播放音乐页面去播放音乐,点击右上角的分享会跳出分享菜单,可以把歌曲分享到想要分享的平台。有一个notification来表示当前所正在播放的歌曲,通过一个红心来添加和收藏,同时可以点击播放上一个,播放下一首,以及暂停等功能。当然可以滑动音乐比方页面来切换歌曲,以及有一个歌曲的总列表。-
功能模块才分落地
嘴上是宿主工程,这个工程的为一作用就是生成我们的apk,下一层是业务组件,包含首页业务(主要是三个侧滑菜单)、登录业务、搜索业务和音乐播放业务。第三层是lib_common_ui,即基础业务组件,公共UI模块,这个模块存放App中所用到的自定义view和其他的一些公共组件,最下层是与业务无关的功能组件。
maven私服
-
概述
本地仓库比较鸡肋,远程仓库中的中央仓库一般有一些大的组织去维护,一般有Mavencenter和jcenter等,中央仓库面向全球的开发者,第二个部分就是私服,与中央仓库的区别是,中央仓库是部署在公网的,而私服部署在局域网,只有在这个局域网内的用户才能下载依赖包,其他可以包括个人见一个maven仓库然后发布到maven公网上,供其他人使用。几乎所有的公司都有自己的maven私服,。
- maven私服搭建流程
1 下载开源工程nexus3.16.2,安装,启动nexus服务
2 打开浏览器,输入localhost8081,8081是nexus启动的默认端口,进入nexus首页,这就是maven私服的管理平台,创建两个maven仓库,一个是releases,主要用来上传releases版本的第三方库,另一个是snapshots,上传快照版本,仓库地址通过copyURL拷贝出来,仓库类型都是hosted类型
3 maven仓库引入自己的项目中
在buildscript中和allproject中引入
配置仓库地址
设置用户名密码
有多少个仓库就引入多少个
4 上传脚本配置代码
在各自的库gradle中引入maven
配置uploadArchives{}
指定上传的工程名,版本号,描述信息
5 完成上传
对应的tasks中upload中双击uploadArchives构建当前工程并且完成上传,上传完毕后就会在nexus管理页面看到这个库
工程buildgradle文件优化
创建一个gradle文件,这个文件用来存放所有的compileSDK和最小SDK这些编译使用的常量,把这些固定的常量提取到一起,方便管理,在根工程中引用,根工程就有了自定义ext中的三个属性,那么就可以在子工程中使用root工程中定义好的这些属性。以后想要换个SDK版本或者添加一个依赖,重新编译即可引入,方便管理,消除魔法数。