从今天开始带大家一起从零开始撸一个美团Android版App。 【从零撸美团】这个专题将持续更新,用以详细记录分享开发过程,欢迎关注。
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:dbflow−core:{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:dbflow−rx2:{dbflowVersion}”,
]
}
版本号和具体依赖地址也分开了,更加便于管理。 其中除了依赖的地址,所有的变量名都是随便取的。app
对应于项目module app
里的依赖,当然还有 data
,domin
,common
三个 module 的依赖,声明方式跟 app
一样,只是我还没用到所以没写。
2、声明创建的文件
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
学习分享,共勉
Android高级架构师进阶之路
题外话,我在阿里工作多年,深知技术改革和创新的方向,Android开发以其美观、快速、高效、开放等优势迅速俘获人心,但很多Android兴趣爱好者所需的进阶学习资料确实不太系统,完整。今天我把我搜集和整理的这份学习资料分享给有需要的人,若有关Android学习进阶可以与我在Android终极开发交流群一起讨论交流。 点击这里前往我的Git领取资料 的同时,还可以加入一个好的学习交流圈,何乐而不为呢?加入我们和我们一起吧!!
- Android进阶知识体系学习脑图
- Android进阶高级工程师学习全套手册
- 对标Android阿里P7,年薪50w+学习视频
- 大厂内部Android高频面试题,以及面试经历
xVN-1710508215870)]
- 对标Android阿里P7,年薪50w+学习视频
[外链图片转存中…(img-N2b5dQ0s-1710508215871)]
- 大厂内部Android高频面试题,以及面试经历