Android从零撸美团(一) - 统一管理 Gradle 依赖 提取到单独文件中

从今天开始带大家一起从零开始撸一个美团Android版App。 【从零撸美团】这个专题将持续更新,用以详细记录分享开发过程,欢迎关注。

源码地址:github.com/cachecats/L…

Android从零撸美团(二) - 仿美团下拉刷新自定义动画

Android从零撸美团(三) - Android多标签tab滑动切换 - 自定义View快速实现高度定制封装

Android从零撸美团(四) - 美团首页布局解析及实现 - Banner+自定义View+SmartRefreshLayout下拉刷新上拉加载更多


专题的第一篇文章本来想按惯例讲项目介绍、整体架构、代码规范之类的。但今天有点躁动,不想讲那么正经深奥的东西,定的最低计划又是周三和周日每周两更,所以就暂且讲构建项目依赖的小技巧吧。项目架构稍后会补上~

正文

一、为什么要把项目依赖抽取单独管理

如果项目比较小,架构简单只有一个 build.gradle 文件那完全不必将依赖抽离出来,因为整个系统构建好还是要费一些精力的。不是一直喊避免过度设计吗?

但是如果按照著名的 Android-CleanArchitecture (github.com/android10/A…) 介绍的架构对项目进行分层,整个项目会有好几个 module

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先贴出 Clean architecture 的架构图感受下~

基于这个分层思想,我的项目结构是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

项目一共分为四层 common: 整个依赖的最底层,抽取出其他层共有的代码。比如 RxJava的封装,工具类的封装等。 data: 数据层,网络数据、数据库中数据处理层。 domin: 这层应该是纯 Java 代码,从 data 层出来的数据要经过 domin 转换一下,UI层 app 引用的实体都是 domin 层的。用这种方法来隔离网络和数据库数据变化对代码的影响。 app: 应该叫 presentation 表现层,觉得这名字太长还是 app 看着舒服~ 这层就是正常的 Android 代码。

这里对 Clean architecture 做了一定的修改,在实践中感觉这样分层开发更顺手。 具体的架构解析及每一层具体该怎么写请关注后面的文章,以后都会详细讲解。

重回刚才的问题,为什么要抽取依赖统一管理?

有四个 module 就有四个 build.gradle,并且依赖很多都是重复的,分开写在四个不同的文件不利于后期维护升级。 想想如果要更改某个依赖的版本,得打开四个文件挨个改,多麻烦。 所以将可变的依赖抽离出来统一管理是很有必要的。

二、提取方法

下面就是具体的操作方法。 把大象装进冰箱需要几步?

三步走:

1、创建管理依赖的文件

本项目中在与 app , data 同级的根目录下创建了文件夹 buildsystem,然后在这个文件夹下创建文件 dependences.gradle。目录结构如下图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

dependences.gradle 代码:

ext {

//Android
androidBuildToolsVersion = “27.0.3”
androidMinSdkVersion = 18
androidTargetSdkVersion = 27
androidCompileSdkVersion = 27

//Libraries
recyclerViewVersion = “27.0.2”
rxjava2Version = “2.1.8”
rxandroidVersion = “2.0.1”
daggerVersion = “2.14.1”
glideVersion = “4.5.0”
butterKnifeVersion = “8.8.1”
bannerVersion = “1.4.10”
loggerVersion = “2.1.1”
baseRecyclerViewAdapterHelperVersion = “2.9.30”
dbflowVersion = “4.2.4”

app = [
recyclerView : “com.android.support:recyclerview-v7: r e c y c l e r V i e w V e r s i o n " , r x j a v a : " i o . r e a c t i v e x . r x j a v a 2 : r x j a v a : {recyclerViewVersion}", rxjava : "io.reactivex.rxjava2:rxjava: recyclerViewVersion",rxjava:"io.reactivex.rxjava2:rxjava:{rxjava2Version}”,
rxandroid : “io.reactivex.rxjava2:rxandroid: r x a n d r o i d V e r s i o n " , d a g g e r : " c o m . g o o g l e . d a g g e r : d a g g e r : {rxandroidVersion}", dagger : "com.google.dagger:dagger: rxandroidVersion",dagger:"com.google.dagger:dagger:{daggerVersion}”,
daggerCompiler : “com.google.dagger:dagger-compiler: d a g g e r V e r s i o n " , g l i d e : " c o m . g i t h u b . b u m p t e c h . g l i d e : g l i d e : {daggerVersion}", glide : "com.github.bumptech.glide:glide: daggerVersion",glide:"com.github.bumptech.glide:glide:{glideVersion}”,
glideCompiler : “com.github.bumptech.glide:compiler: g l i d e V e r s i o n " , b u t e r K n i f e : " c o m . j a k e w h a r t o n : b u t t e r k n i f e : {glideVersion}", buterKnife : "com.jakewharton:butterknife: glideVersion",buterKnife:"com.jakewharton:butterknife:{butterKnifeVersion}”,
butterKnifeCompiler : “com.jakewharton:butterknife-compiler: b u t t e r K n i f e V e r s i o n " , b a n n e r : " c o m . y o u t h . b a n n e r : b a n n e r : {butterKnifeVersion}", banner : "com.youth.banner:banner: butterKnifeVersion",banner:"com.youth.banner:banner:{bannerVersion}”,
logger : “com.orhanobut:logger: l o g g e r V e r s i o n " , b a s e R e c y c l e r V i e w A d a p t e r H e l p e r : " c o m . g i t h u b . C y m C h a d : B a s e R e c y c l e r V i e w A d a p t e r H e l p e r : {loggerVersion}", baseRecyclerViewAdapterHelper: "com.github.CymChad:BaseRecyclerViewAdapterHelper: loggerVersion",baseRecyclerViewAdapterHelper:"com.github.CymChad:BaseRecyclerViewAdapterHelper:{baseRecyclerViewAdapterHelperVersion}”,
dbflowProcessor : “com.github.Raizlabs.DBFlow:dbflow-processor: d b f l o w V e r s i o n " , d b f l o w C o r e : " c o m . g i t h u b . R a i z l a b s . D B F l o w : d b f l o w − c o r e : {dbflowVersion}", dbflowCore : "com.github.Raizlabs.DBFlow:dbflow-core: dbflowVersion",dbflowCore:"com.github.Raizlabs.DBFlow:dbflowcore:{dbflowVersion}”,
dbflow : “com.github.Raizlabs.DBFlow:dbflow: d b f l o w V e r s i o n " , d b f l o w R x 2 : " c o m . g i t h u b . R a i z l a b s . D B F l o w : d b f l o w − r x 2 : {dbflowVersion}", dbflowRx2 : "com.github.Raizlabs.DBFlow:dbflow-rx2: dbflowVersion",dbflowRx2:"com.github.Raizlabs.DBFlow:dbflowrx2:{dbflowVersion}”,
]

}

版本号和具体依赖地址也分开了,更加便于管理。 其中除了依赖的地址,所有的变量名都是随便取的。app 对应于项目module app 里的依赖,当然还有 datadomincommon 三个 module 的依赖,声明方式跟 app 一样,只是我还没用到所以没写。

2、声明创建的文件

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

学习分享,共勉

Android高级架构师进阶之路

题外话,我在阿里工作多年,深知技术改革和创新的方向,Android开发以其美观、快速、高效、开放等优势迅速俘获人心,但很多Android兴趣爱好者所需的进阶学习资料确实不太系统,完整。今天我把我搜集和整理的这份学习资料分享给有需要的人,若有关Android学习进阶可以与我在Android终极开发交流群一起讨论交流。 点击这里前往我的Git领取资料 的同时,还可以加入一个好的学习交流圈,何乐而不为呢?加入我们和我们一起吧!!

  • Android进阶知识体系学习脑图

  • Android进阶高级工程师学习全套手册

  • 对标Android阿里P7,年薪50w+学习视频

  • 大厂内部Android高频面试题,以及面试经历

xVN-1710508215870)]

  • 对标Android阿里P7,年薪50w+学习视频

[外链图片转存中…(img-N2b5dQ0s-1710508215871)]

  • 大厂内部Android高频面试题,以及面试经历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值