Android Gradle文件拆解

google()

jcenter()

}

}

})

2.build.gradle(app)

====================================================================================

2.1 buildTypes


表示的是该模块是给哪个人群用的。

  • debug表示是给自己用的。

  • relase表示是给外部人用的

  • internal表示是给内部人用的

在这里插入图片描述

如果你在项目目录下构建 debug、release或者internal的包,那么gradle会自动的关联main和对应的包的代码,这样,代码就会形成了不同的模式。

一般项目会默认有两种type,可以根据Android Studio最左边的Build Variant查看:

在这里插入图片描述

表示当前有两个版本,debug和release版本,通过切换版本,或者在对应的包上编写代码,我们可以给不同的群体用不同的App。并且在编译器在安装这些版本的时候,别的版本的代码是会忽略掉的,所以这样并不会导致APK体积增大或者效率变慢。

2.2 productFlavors


它的作用和buildTypes差不多,但是它又多了一层维度。这层维度是我们可以定义的一个维度。

比如,我们要在App原有的 debug(自己用)、relase(发布版)的上面,再加一层 付费版和免费版。

这样多一个维度后,就变成了: debug免费版、debug付费版、relase免费版、relase付费版,看下下面代码:

android {

//注意在声明productFlavors前,要声明flavorDimensions

flavorDimensions ‘cost’

//其中free和paid是自己定义的维度,这个方法并不是groovy定义,而是通过闭包的特性被创建出这么一个方法出来

productFlavors {

free {

}

paid {

}

}

}

构建好后,接下来再去查看Build Variants,就可以看到在原来的 debug、release又多了一个维度:

在这里插入图片描述

是不是觉得已经有点帮助了呢?

flavorDimensions声明了维度的属性,可以自己定义,上面的 free和paid属于付不付钱的属性,所以我给它起名叫cost(你也可以叫别的)。我完全还可以在这上面,再多一层维度:

//在付费版、免费版属性的基础上,再多加一个国际化的属性

flavorDimensions ‘cost’, ‘nation’

productFlavors {

free {

dimension ‘cost’

}

paid {

dimension ‘cost’

}

china {

dimension ‘nation’

}

international{

dimension ‘nation’

}

}

其中china一个版、国际一个版,并用 dimension来声明它是声明属性的

在这里插入图片描述

这样子看,项目突然就复杂了起来,但是这样子确实是对一些需求很复杂、工程量很大的项目,划分的稍微清晰、维护也方便了一点。这就有点像后台服务端的正式服、测试服这么一个说法。这种做法针对当前产品做出来的,具体该怎么用,或者用还是不用,都是可以很快讨论出来的。

2.3 dependencies


在这里插入图片描述

从闭包的角度去理解的话,implementation ‘xxxxx’ 其实就是跟下面的代码差不多

//下面是伪代码:implementation ‘xxxxx’

denpendenciesHandler.add(‘implementation’,‘xxxxx’)

compile、implementation、api的区别

complie在2018年被弃用,使用implementation和api取代之。而为什么会有这么一个现象,在于他们有不同的作用。

注1:首先compile、implementation、api这三个依赖方法并不是针对、解决远程依赖的问题的(因为我们单项目里用的很多都是远程的开源框架),因为这些远程框架他们更新的频率很低。而用来解决本地依赖所产生的一些问题!!!!!!

下面举例的Aproject、Bproject、Cproject的三个都是本地的项目。

注2:打包和编译是两个分开的概念。

  • compile

传递依赖。

假如Aproject 通过compile依赖Bproject, 并且Bproject 通过compile依赖了 Cproject,就产生了一条依赖链A->B->C

那么编译之后,Aproject能够用引用Cproject的内容。

但这样做是由劣势的,因为如果Cproject 进行了改变,那必然会导致Bproject进行一次重新的编译,而Bproject重新的编译会导致Aproject也会进行一次重新编译。

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司21年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
的形式给大家展示一小部分。

[外链图片转存中…(img-UI331Ltv-1725633391414)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值