介绍
Gradle 是google开发的基于groovy语言 ,用于代替 ant 构建的一种配置型语言
Gradle 是基于groovy语言实现(基于JVM的语法和java类似的脚本语言)的一个Android编译系统, google针对Android编译用groovy语言开发了一套 DSL 语言 有额外需要直接使用groovy,或者java代码解决
下载 / 安装
地址: http://services.gradle.org/distributions/
环境配置
1 | GRADLE_HOME={installed path} |
验证
gradle -v
问题&解决办法记录
Idea中gradle下载太慢解决办法
项目名称\gradle\wrapper\gradle-wrapper.properties中的distributionUrl使用阿里云或腾讯的代理地址就可以了
1 | distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip |
更新最新依赖问题
脚本工具由 python2 编写,怎么做到全局使用,请配置在环境变量中,需要额外功能,请自行修改脚本
- gradle 相对 maven 做了一层本地缓存 ${user}/.gradle/caches/modules-2(默认缓存更新是 24小时)
- gradle 在当前工程也做了一层缓存 ${project.root}/.gradle
- 使用 IDE 这种集成开发环境,也加了一层缓存(在 IDE 的缓存目录里面)
- 工程开发配置文件(当前工程下 .idea .vsc 等等),这个会影响到代码提示 所以,经常出现 gradle 命令更新到最新依赖代码,IDE 不显示的问题,你需要自行处理好缓存 一般命令行 加入 --refresh-dependencies 可以更新 gradle 部分,但不会影响到 IDE 如果想要 IDE 在写代码时知道更新,你需要刷新或者修改 IDE 的缓存,具体怎么操作需要根据情况自行解决 这里提供2个工具脚本辅助
脚本工具 gradle 本地缓存 SNAPSHOT 清理工具
版本冲突问题
如果依赖了库A的1.0版本,又依赖了库B,这个库B依赖了库A的2.0版本,此时就发生了版本冲突问题
- 我们可以手动去除冲突的依赖,在冲突的库选一个进行exclue
1 | implementation ('com.carlos.test:Test:1.0.0') { |
- 我们可以强制使用某版本依赖
1 | configurations.all { |
项目结构
1 | |____gradle |
gradle/wrapper/gradle-wrapper.jar
- 这是Gradle Wrapper的核心文件,是一个可执行的Java归档文件。
- 它的作用是下载并安装指定版本的Gradle。
- 配合
gradle-wrapper.properties文件使用,确保项目在不同的开发环境中使用一致的Gradle版本。
gradle/wrapper/gralde-wrapper.properties
每个基于gradle构建的工程都有一个gradle本地代理,叫做 gradle wrapper, 在 /gradle/wrapper/gralde-wrapper.properties 目录中声明了指向目录和版本
1 | distributionBase=GRADLE_USER_HOME |
build.gradle
- 这是Gradle项目的主要构建脚本文件。它定义了项目的构建逻辑、依赖项、插件、任务等。
- 主要内容可能包括:
- 项目的依赖(如第三方库、插件等)。
- 构建任务(如编译、测试、打包)。
- 配置构建行为(如Java版本、编译选项等)。
- 每个子项目通常也会有自己的
build.gradle文件。
gradlew
- 这是Gradle Wrapper的可执行脚本文件(Linux/macOS系统下的版本)。
- 它的作用是运行Gradle构建,而不需要用户在本地安装Gradle。
- 使用
./gradlew可以确保使用项目指定的Gradle版本,而无需担心环境中安装的Gradle版本是否匹配。
settings.gradle
- 这是Gradle项目的配置文件,用于定义项目的结构。
- 主要用于多模块项目,指定哪些子模块(subprojects)属于当前项目。
- 对于单模块项目,
settings.gradle通常是可选的,但可以用来设置项目的根名称或其他全局配置。
Gradle 常用命令
注意:在window下可以直接运行 gradlew 如果是Linux 或者 mac 命令为 gradle gradlew 这里都简写成 ./gradlew
任务查询命令
子模块任务,不代表工程根也有同样的任务,所以需要单独查询
最佳命名实践为 全小写英文 防止编译兼容问题
- 所有后面的命令,都必须在 tasks --all 可见,不然报告找不到这个任务
1 | # 查看任务 |
快速构建命令
1 | # 查看构建版本 |
注意build命令把 debug、release环境的包都打出来的 如果需要指定构建使用如下命令
gradle 指定构建目标命令
1 | # 编译并打Debug包 |
gradle 构建并安装调试命令
1 | # 编译并打Debug包 |
gradle 多渠道打包
1 | # assemble还可以和productFlavors结合使用,如果出现类似 Task 'install' is ambiguous in root project 这种错误,请查看配置的多个渠道然后修改为以下命令来构建调试 |
gradle 查看包依赖
1 | ./gradlew dependencies |
gradle 依赖管理
- 传递依赖特性
1 | dependencies { |
- 强制指定编译版本
1 | configurations.all{ |
- 动态依赖特性
1 | dependencies { |
设定编码
1 | allprojects { |
build.gradle 文件详解
- build.gradle 是一个 gradle 的构建脚本文件,支持 java、groovy 等语言。
- 每个 project 都会有一个 build.gradle 文件,该文件是项目构建的入口,可配置版本、插件、依赖库等信息。
- 每个 build 文件都有一个对应的 Project 实例,对 build.gradle 文件配置,本质就是设置 Project 实例的属性和方法。
- 由于每个 project 都会有一个 build 文件,那么 Root Project 也不列外.Root Project 可以获取到所有 Child Project,所以在 Root Project 的 build 文件中我们可以对 Child Project 统一配置,比如应用的插件、依赖的 maven 中心仓库等。
- build 文件中常见的属性和方法如下所示:

常见属性代码
1 | //指定使用什么版本的JDK语法编译源代码,跟编译环境有关,在有java插件时才能用 |
提示 1:group+name+version 类似于 maven 的 group+artifactId+version
提示 2:encoding 解决业务代码与测试代码中文乱码问题
Repositories
1 | repositories { |
因为 Gradle 没有自己的远程仓库,而是使用 Maven、jcenter、jvy、google 这些远程仓库。
Subprojects 与 Allprojects
allprojects 是对所有 project(包括 Root Project+ child Project[当前工程和所有子工程])的进行统一配置,而 subprojects 是对所有 Child Project 的进行统一配置。
1 | allprojects { |
通常在 subprojects 和 allprojects 中:
1 | allprojects(){ //本质Project中的allprojects方法,传递一个闭包作为参数。 |
1: 如果是直接在 根 project 配置 repositories 和 dependencies 则 只针对根工程有效。
2: 我们也可以在对单个 Project 进行单独配置:
1 | project('subject01') { |
执行 gradle build 指令即可查看测试效果。
ext 用户自定义属性
Project 和 Task 都允许用户添加额外的自定义属性,要添加额外的属性,通过应用所属对象的 ext 属性即可实现。添加 之后可以通过 ext 属性对自定义属性读取和设置,如果要同时添加多个自定义属性,可以通过 ext 代码块:
1 | //自定义一个Project的属性 |
测试:通过 gradle extCustomProperty
输出结果为:
年龄是:18
电话是:19292883833
地址是:北京
口号:奥利给
ext 配置的是用户自定义属性,而 gradle.properties 中一般定义 系统属性、环境变量、项目属性、JVM 相关配置 信息。例如 gradle.properties 文件案例:加快构建速度的,gradle.properties 文件中的属性会自动在项目运行时加载。
1 | ## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出 |
Buildscript
buildscript 里是 gradle 脚本执行所需依赖,分别是对应的 maven 库和插件。
1 | import org.apache.commons.codec.binary.Base64 |
需要注意的是:
- buildscript{}必须在 build.gradle 文件的最前端。
- 2.对于多项目构建,项目的 buildscript ()方法声明的依赖关系可用于其所有子项目的构建脚本。
- 构建脚本依赖可能是 Gradle 插件。
如下所示:
1 | //老式apply插件的引用方式,使用apply+buildscript |