一篇文章讲清楚Gradle与Gradle Wrapper的区别

Gradle:android用来构建项目的编程框架。这个玩意对于使用AS开发的,大家都清楚,用这个来构建项目变得无比轻松和高可定制性,比如引入第三方依赖,发布到maven库,构建多渠道版本等等都变得非常轻松,所以对于使用Gradle,自然是没有任何异议了,但是大家经常会在自己的项目中没有看见gradle,疑惑Gradle在哪?反而,没找到gradle,却总是能看见一个叫gradle wrapper的玩意,也不知道什么意思。

如图,找遍整个项目,与gradle有关的就这两个文件夹,却只发现gradle-wrapper.jar。

wrapper的意思:包装。

那么可想而已,这是gradle包装。其实是这样的,因为gradle处于快速迭代阶段,经常发布新版本,如果我们的项目直接去引用,那么更改版本等会变得无比麻烦。而且每个项目又有可能用不一样的gradle版本,这样去手动配置每一个项目对应的gradle版本就会变得麻烦,gradle的引入本来就是想让大家构建项目变得轻松,如果这样的话,岂不是又增加了新的麻烦?所以android想到了包装,引入gradle-wrapper,通过读取配置文件中gradle的版本,为每个项目自动的下载和配置gradle,就是这么简单。我们便不用关心如何去下载gradle,如何去配置进项目来。那么gradle wrapper从何而来?看下图

在Android Studio安装的时候便会自带这个功能jar包,并且我们也看到了gradle-wrapper.properties。所以我们就知道了,AS每新建一个项目,就会将个目录下的这两个文件拷入到项目的gradle文件夹下面。

不知道大家有没有发现还有两个红圈圈住的文件,也是在我们项目根目录下常见的。gradlew是在linux,mac下使用的,gradlew.bat是在window下使用的,提供在命令行下执行gradle命令的功能

但是有人会疑问为什么直接执行gradle的命令,而是执行gradlew的命令?

因为就像wrapper本身的意义,gradle命令行也是善变的,所以wrapper对命令行也进行了一层封装,使用同一的gradlew命令,wrapper会自动去执行具体版本对应的gradle命令。。

那么gradle-wrapper.jar具体下载的gradle去哪了?

一般在用户目录下的.gradle/wrapper/dists存放

那么我们如何去修改要下载的gradle版本呢?

相比有时候大家也为了AS去下载gradle但下载不下来一直卡着而烦恼。

distributionUrl:要下载的gradle地址以及版本,gradle-wrapper会去wrapper/list目录下查找,如果没有对应版本的gradle采取下载,所以如果我们卡顿下载不下来,我们可以先去找国内的镜像网站下载下来,自己放入哪个文件夹,便可。

gradle的3种版本:

    gradle-xx-all.zip是完整版,包含了各种二进制文件,源代码文件,和离线的文档。例如,https://services.gradle.org/distributions/gradle-3.1-all.zip

    gradle-xx-bin.zip是二进制版,只包含了二进制文件(可执行文件),没有文档和源代码。例如,https://services.gradle.org/distributions/gradle-3.1-bin.zip

    gradle-xx-src.zip是源码版,只包含了Gradle源代码,不能用来编译你的工程。例如,https://services.gradle.org/distributions/gradle-3.1-src.zip

那么其他的四个属性呢?就是指定下载的gradle存放的路径

各项属性的整体含义,如下:

    (1) 去 https://services.gradle.org/distributions/gradle-3.1-bin.zip 下载gradle的3.1版本,只包含binary的版本。

    (2) 下载的gradle-3.1-bin.zip存放到C:\Users\<user_name>\.gradle\wrapper\dists目录中。
    (注:具体还有2级目录,即全路径为C:\Users\<user_name>\.gradle\wrapper\dists\gradle-3.1-bin\<url-hash>\,gradle-3.1-bin目录是根据下载的gradle的文件名来定的,<url-hash>目录名是根据distribution url路径字符串计算md5值得来的,具体参考PathAssembler.java中的rootDirName()和getHash(),PathAssembler.java的位置见本文最后的参考路径)

    (3) 解压gradle-3.1-bin.zip,将解压后的文件存放到C:\Users\<user_name>\.gradle\wrapper\dists中。(注:具体还有2级目录,同上)

说到这里大家应该知道了gradle与gradle wrapper的关系了吧。以及项目中的种种gradle-wrapper是哪里来的,gradle到底又是在哪,有了很清楚的了解了吧。最后还有一个东西说一下,  .gradle文件夹,就是那个跟项目第一个文件夹,带点的那个。那个对我们没什么用,他是gradle运行的时候产生的一些记录性的文件。我们不需要关注。

gradle-wrapper.perporties文件属性的解释参考如下:

参考:https://blog.csdn.net/u013553529/article/details/55011602

参考:https://www.cnblogs.com/jiangxinnju/p/8229129.html


转自:https://blog.csdn.net/sinat_31311947/article/details/81084689

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值