----《Android Gradle 权威指南》学习笔记
总目录:Gradle 学习系列 -- 目录
上一篇:Gradle 入门:Hello World
下一篇:Gradle 入门:日志
1 Gradle Wrapper 简介
1.1 Wrapper,顾名思义,就是 Gradle 的一层包装,便于在团队开发过程中统一 Gradle 构建的版本。这样大家都可以用统一的 Gradle 版本进行构建工程,可以避免因为 Gradle 版本不统一而带来的问题。
1.2 一般在项目开发中,用的都是 wrapper 这种方式,而不是自己下载 gradle 的压缩包,解压后配置 gradle 环境变量的方式。 wrapper 在 Windows 下是一个批处理文件,在 Linux 下是一个 shell 脚本。当使用 wrapper 启动 gradle 的时候,wrapper 会自动检查 gradle 是否被下载关联,如果没有则会从配置的地址进行下载并运行构建。这种方式对开发人员是非常方便的,因为不用再去专门配置 gradle 环境了,只要执行 wrapper 命令即可,wrapper 它会自动搞定一切。 ---- IDE 中就是这种方式。
2 生成 Wrapper
2.1 Gradle 提供了内置的任务 wrapper task 来自动生成 wrapper 所需的目录及文件,在项目的根目录中(一般是 build.gradle 的路径下)输入命令 gradle wrapper 即可生成, 如图所示:2.2 各个文件的作用说明如下:
但是有一点需要注意:
gradle taskHello
是用在系统环境变量中配置的 Gradle 版本来执行任务的,如果找不到 Gradle 则会报错
gradlew taskHello
是用在 ./gradle/wrapper/gradle-wrapper.properties 配置的 Gradle 版本来执行任务的,如果找不到对应的 Gradle 则会去配置的链接中下载,下载的默认路径是 C 盘中的 .gradle 文件夹。
(2) gradle-wrapper.jar 是具体业务逻辑实现的 jar 包 gradlew 最终还是使用 java 执行这个 jar 包来执行 Gradle 的相关操作。
(3) gradle-wrapper.properties 是配置文件,用于配置使用哪个版本的 Gradle。
2.3 生成的这些 wrapper 文件可以随着项目工程一起提交到版本控制系统里面(比如 git),这样后续开发也会按照提交的配置好的 Gradle 版本进行统一构建开发。
3 wrapper 配置
3.1 在执行命令 gradle wrapper 时可以指定一些参数来控制 wrapper 的生成。具体有如下两个配置参数:
--gradle-version 用于指定使用的 Gradle 的版本
--gradle-distribution-url 用于指定下载 Gradle 版本的URL,该值的规则是 http://services.gradle.org/distributions/gradle-${gradleVersion}-bin.zip
3.2 gradle-wrapper.properties 是 gradle 的配置文件。在执行命令 gradle wrapper 时的参数配置会写入该文件中,具体的字段说明如下:
distributionBase 下载 Gradle 压缩包解压后存储的主目录
distributionPath 相对于 distributionBase 的解压后的 Gradle 压缩包的路径
zipStoreBase 同 distributionBase,区别是存放的是 zip 压缩包
zipStorePath 同 distributionPath,区别是存放的是 zip 压缩包
distributionUrl Gradle 发行版本压缩包的下载地址 ---- 比较关注的是这个配置字段
3.3 如果运行 ./gradlew 的时候一直卡着不动,可能是因为官方的 Gradle 地址被封闭了,可以把 distributionUrl 换成其他的镜像地址尝试。
4 自定义配置 wrapper task 生成 gradle wrapper
4.1 我们可以对 wrapper task 进行修改,生成自定义配置的 gradle-wrapper.properties
4.2 在 build.gradle 构建脚本中配置以下代码:
task wrapper(type: Wrapper){
gradleVersion = '7.1'
archiveBase = 'GRADLE_USER_HOME'
archivePath = 'wrapper/dists'
distributionBase = 'GRADLE_USER_HOME"'
distributionPath = 'wrapper/dists'
distributionUrl = 'http\://services.gradle.org/distributions/gradle-7.1-all.zip'
}
这样在执行 gradle wrapper 就会生成7.1版本的 wrapper 了,而不用使用 --gradle-version 7.1 这样的命令进行指定了。