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

2023-05-16

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的构建体系。本文并没有就三者的关系进行死磕,仅仅点到即止。我们需要形成的是大局观。好吧,就这么多了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gradle 和 Gradle Wrapper 到底是什么关系。 的相关文章

  • 手动缓存Retrofit+OkHttp响应体,不再局限于Get请求缓存

    转载请标明出处 xff1a http blog csdn net iamzgx article details 51764848 本文出自 iGoach的博客 概括 这篇博客是接着上一篇博客学会Retrofit 43 OkHttp 43 R
  • 哪个才是Android工程构建时的gradle版本?gradle-wrapper.properties还是build.gradle的buildscript说了算?

    先说谜底 xff0c gradle wrapper properties说了算 xff08 1 xff09 build gradle的buildscript里的buildscript dependencies的com android too
  • cocos2d-js之入门篇

    转载请标明出处 xff1a http blog csdn net iamzgx article details 54232599 本文出自 iGoach的博客 cocos2d js xff0c 至今日 xff0c 也马马虎虎算接触了一个星期
  • 微信小程序-入门篇

    转载请标明出处 xff1a http blog csdn net iamzgx article details 72615506 本文出自 iGoach的博客 前言 2017年1月9日 xff0c 微信小程序发布 这也标志着FaceBook
  • 使用OkHttp上传图片

    简介 上传图片是一个APP的常见功能 xff0c 可以是通过OOS上传到阿里云 xff0c 也可以直接上传到Server后台 xff0c OOS有提供相应的SDK xff0c 此处忽略 下面通过OkHttp来实现图片的上传 代码 直接上代码
  • 简单说说如何把json或者txt文件转换为db

    前言 最近在Github上找到一个中国城市的json文件 xff0c 虽然也有db文件 xff0c 但是想通过这个json文件生成自己的数据库表 下面就简单来转换成自己的数据库 准备json 在Github找到一个下面json表 34 sp
  • 2018年7月面试记录

    MRCM 聊天缓存如何实现的聊天重发如何实现如何保持长连接心跳简述TCP协议写一个自己最擅长的设计模式 ZHYT finish会立马销毁activity吗view的生命周期activity结束了HandlerQueue如何处理Handler
  • Android面向AOP之AspectJ的使用篇

    前言 AOP xff0c 它不是一门新语言 xff0c 是一种面向切面的思想 它主要的作用是把一些具有相同属性或者相同功能的代码抽离出来形成一个切面 xff0c 从而实现面向切面编程 xff01 而AspectJ就是基于Java语言实现AO
  • 仿拉勾首页之Behavior的学习

    前言 最近在找工作 xff0c 于是打开拉勾 xff0c 看了看首页 xff0c 交互做的还是不错的 先来看看拉勾效果 然后最终实现的效果 布局是图片直接用 xff0c 所以会失真 实现思路 首先这个是一个MD的效果 xff0c 可以使用自
  • Java中Collections类方法常用合集

    目录 1 Collections sort list 2 Collections reverse list 3 Collections shuffle list 4 Collections swap List list int i int
  • 解决Slf4j日志不打印问题

    日志不打印的问题 xff0c 很让人头疼 xff0c 也是我们经常遇到的问题 日常站点状态巡检时发现有异常日志 xff0c 定位到日志位置 xff0c 看其上线文自定义输出的日志时却发现 xff0c 自己加的日志都没输出 排查了一下初步定位
  • Android Studio 配置Gradle总结

    一 xff0c 问题 xff1a 换个新电脑安装完Android Sutdio第一次打开一个工程巨慢怎么办 xff1f 手动配置Gradle Home为什么总是无效 明明已经下载了Gradle xff0c 配置了gradle home 为什
  • android 指纹识别 之 BiometricPrompt的简单使用教程

    1 使用android api 28的sdk创建一个新的项目 创建完成后 xff0c 在build gradle中查看是否正确 2 在AndroidManifest xml中添加用户权限 lt uses permission android
  • Linux常用命令

    expect except是一种自动交互语言 xff0c 能实现在shell脚本中为scp和ssh等自动输入密码自动登录 span class token comment usr bin expect span span class tok
  • 使用 Acegi 保护 Java 应用程序,第 5 部分: 保护 JSF 应用程序中的 JavaBean

    Bilal Siddiqui 在这篇文章中总结了 本系列 xff0c 演示了如何用 Acegi 在 JSF 应用程序中保护对 JavaBean 的访问 可以使用多种方式配置安全 bean xff0c 包括直接在 JSF 标签中使用受 Ace
  • baidu

    1 hashmap的底层原理 和hashtable的区别 put xff1a 对key的hashCode做hash操作 xff0c 然后再计算在bucket中的index xff1b 如果没碰撞直接放到bucket里 xff1b 如果碰撞了
  • ssh 带端口登录

    ssh span class token operator span p 端口号 root 64 ip
  • 域名+解析+GitHub来搭建自己的个人网站

    域名 43 解析 43 GitHub来搭建自己的个人网站 标签 xff1a GitHub使用技巧 网站搭建 版权声明 xff1a 本文为 64 icurious 的原创文章 xff0c 可以转载 xff0c 但请务必注明作者和出处 xff0
  • python之BeautifulSoup之二 带属性值的抓取(find_all('tag', attrs={'class':'value'})

    系统 xff1a Windows python 2 7 11 利用BeautifulSoup库抓取页面的一些标签TAG值 再抓取一些特定属性的值 示例标签 xff1a lt cc gt lt div id 61 34 post conten
  • Android 动画库对比(Lottie 和 SVGA)

    Lottie 和 SVGA 对比 友情链接 xff1a SVGA 源码解析 现有方案 方案一 Gif 帧动画方案二 Native动画 xff08 属性动画 补间动画 xff09 方案三 xff1a 动画库 LottieSVGAKeyfram

随机推荐