Gradle 和 Gradle Wrapper 到底是什么关系。

Gradle Wrapper

我们推荐使用 Gradle Wrapper 执行gradle 构建,(后面简称Wrapper).Wrapper 实质上是一个脚本,这个脚本使用申明版本的gradle 执行构建任务。如果本地没有Wrapper 中申明的gradle 版本,Wrapper会先下载它。这样开发者不必必须下载和项目指定版本相同的gradle,就可以完成构建。从而为公司节约时间、节约成本。

  • Wrapper 仅仅是一个执行gradle 的脚本 。
  • Wrapper只是为了让我们更方便快捷的使用 gradle

AndroidStudio 中的 Gradle Wrapper

我们在 AndroidStudio 打包的时候会使用到这样的命令./gradlew assmeble。为什么可以使用这个命令?其实gradlew就是一个脚本,可以打开它看一看( 部分)。

#!/usr/bin/env sh

##############################################################################
##
##  Gradle start up script for UN*X
##
##############################################################################

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done

这就是Wrapper中的执行的脚本,那么它在哪里确定gradle 的版本的呢,它还有个配置文件gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
  • distributionBase的值为GRADLE_USER_HOME,那GRADLE_USER_HOME代表的路径是什么呢?就是 ~/.gradle/这个文件夹,也就是当前用户下的.gradle 文件夹 。如Use/xxxxx/.gradle
  • distributionUrl指定Wrapper中使用的gradle 版本。Wrapper如果本地没有这个gradle 版本它就会去下载。然后放在distributionBase+distributionPath路径下。也就是 ~/.gradle/wrapper/dists 路径下。
  • 我本地就有这些下好的gradle版本。
    gradle_1

Wrapper到底为我们提供了什么便利?

我们本地开发的时候gradle 肯定需要下载。但比如给同事的电脑上打个包什么的,我们希望只把代码 clone 下来就行了。如果还要下载配置gradle 环境也太麻烦了。或 Jenkins 上,没有我们需要 gradle版本。实质上我们现在从git仓库clone 代码后并不需要配置gradle 环境,使用 gradlew相关命令就可以进行打包了。而这一切当然都是Wrapper的功劳。

我们会把哪些对于打包比较重要的文件上传到git仓库(这里主要说和Wrapper相关的)
  • gradlew这个文件的重要性自然不必说了,这是个脚本文件。
  • gradle-wrapper.properties这是Wrapper 配置文件,肯定要 上传 。
  • gradle-wrapper.properties同在 gradle/wrapper下的gradle-wrapper.jar,这个jar包可以勉强认为就是 gradle
  • 比如build.gradlesettings.gradlegradle.properties 等等我就不一一列举了。
    在这些文件的通力合作下,我们可以在没有gradle 的情况下使用Wrapper完成打包等任务。

Wrapper如此强大,为什么我们还会出现 gradle 版本的问题呢?

既然Wrapper如此强大,这个报错又是怎么回事呢?

Error : minimum supported gradle version is 4.6 in android studio 3.0.1

这是因为 Android Gradle插件。Android Studio 编译系统以 Gradle 为基础,并且 Android Gradle插件添加了几项专用于编译 Android 应用的功能。虽然 Android插件通常会与Android Studio的更新步调保持一致,但插件(以及 Gradle 系统的其余部分)可独立于 Android Studio 运行并单独更新。另外由于gradle各个版本之间支持的功能存在差异。所以会存在不同Android Gradle插件,对支持的gradle最低版本有要求 。在projectbuild.gradle 文件中指定Android Gradle插件版本。如下

  dependencies {
        classpath 'com.android.tools.build:gradle:3.1.0'
        

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }

Gradle 环境配置

如果你没有配置gradle 环境,执行gradle相关命令是无法找到命令的。如果需要深入研究gradle 这也是无法逃避的一个环节。那么我们现在就来配置下Mac 平台的gradle环境。(其他环境类似,请自行配置,就是不配置也不影响本文的阅读)

  • Terminal 中执行如下命令
  vim ~/.bash_profile
  • 在配置文件.bash_profile中增加如下
#gradle
export GRADLE_HOME=/Users/zhang/.gradle/wrapper/dists/gradle-5.1.1-all/97z1ksx6lirer3kbvdnh7jtjg/gradle-5.1.1/bin
export PATH=$GRADLE_HOME:$PATH
  • 注意这是我的 Gradle 路径,我们刚刚已经找到Wrapper帮我们下载好的各个版本Grale 。我这里选了gradle-5.1.1版本的进行配置。指定路径的时候需要一直指定到bin路径下。
  • 执行 source ~/.bash_profile 使刚刚配置的 gradle路径生效即可。
  • 执行gradle -v,如果显示gradle 的 版本信息,则说明配置成功。

总结

Android Gradle插件、GradleGradle Wrapper 共同组成了android的构建体系。本文并没有就三者的关系进行死磕,仅仅点到即止。我们需要形成的是大局观。好吧,就这么多了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容