1. Gradle是什么
Gradle是一个通用的构建工具,支持诸多主要的 IDE,包括 Android Studio、IntelliJ IDEA、Visual Studio 等
- Gradle 的底层实现(核心引擎和框架)其实是用 Java 编写的
- 开发者通常使用 Groovy 或 Kotlin 来编写构建脚本
1.1 那么为什么Gradle的底层不使用Groovy进行开发,而是使用Java ?
- Java具有更被广泛验证的稳定性,生态系统庞大且成熟,拥有大量的开源库和工具
- Java是静态语言,具有更好的可维护性,尤其是在一个需要长期维护的大型开源项目时
- 随着时间推移,Gradle还引入了Kotlin DSL作为构建脚本的开发,而底层仍然使用Java,这样可以确保无论脚本层如何变化,核心引擎的性能和表现都能一致
2. Gradle和Ant、Maven
- Ant : 2000年由Apache推出的纯Java编写的构建工具,通过build.xml文件管理项目
- Maven : 2004年Apache推出的使用pom.xml管理项目的构建工具
- 缺点 : 配置文件编写不够灵活,构建过程僵化
- Gradle : 2012年Google推出的权限项目构建工具,集合了Ant和Maven各自的优势。
- 相对学习成本高
3. Gradle安装包
在Gradle中,src
、bin
和all
是不同类型的发布版本或分发方式,这些版本在内容和使用上有所不同。
Gradle的所有安装包都可以在官网上下载到 : Gradle Release,以下是它们之间的主要区别:
- src(源码版):包含了Gradle的完整源代码
- bin(二进制版):包含了Gradle的可运行程序,但不包含源码和文档
- all(完整版):包含了Gradle的完整发布,包括可运行程序、用户文档和源码
4. Gradle项目结构
Android项目的目录结构就是继承自Gradle的,所以我们会感觉Gradle的项目结构非常的熟悉。
下面这张图,我对Gradle目录的结构,做了对应的说明。
其中
gradlew.bat
这个是在windows
下的可执行脚本gradlew
是在其他系统下的可执行脚本
无论是gradlew.bat
还是gradlew
实际上都是执行的wrapper
文件夹底下指定版本的Gradle
的指令
详见 Gradle Directories
5. Gradle Wrapper
Gradle的项目中,都有gradle-wrapper.jar
和gradlew.bat
脚本。
假设我们把这个项目复制到没有安装任何Gradle的机器上,会发生什么 ?
会自动去下载指定的gradle。
可以看一下脚本里的源码,本质上会去加载并运行gradle-wrapper.jar
。gradle-wrapper.jar
会把gradle
指定版本给下载下来后,然后用这个指定gradle
版本来执行构建。
把gradlew wrapper
给上传上去,以保证任何人将项目源码下载下来之后,都可以和你一样的gralde
版本去构建,以避免版本不一致带来的问题。
6. GradleUserHome
GradleUserHome是Gradle
构建工具的一个重要属性,它是Gradle的工作及缓存仓库文件目录。如果不进行特别配置,GradleUserHome
的默认路径通常是用户目录下的“.gradle”
文件夹 (C:\Users\我的用户名\.gradle
)。在这个目录下,Gradle
会下载或缓存大量文件。
由于GradleUserHome
占用存储空间比较大,我们可以配置全局的环境变量,将GradleUserHome
设置到非系统盘中,从而减少C盘的磁盘空间占用。
如果你把一个gradle的脚本放在init.gradle这个目录,那么这个脚本就会对你机器上所有的gradle构建生效,在你的gradle构建之前,它就会先执行一下。比如说执行一个全局的仓库替换(国内下载很慢)。
但是init.gradle 文件和项目的 settings.gradle 或 settings.gradle.kts 文件不同。settings.gradle 文件是用于配置项目设置(如项目名称、包含的模块等)的,而 init.gradle 是全局的,并且针对Gradle守护进程。
在大多数情况下,你不需要手动创建或编辑 init.gradle 文件,除非你有特定的全局配置需求。如果你确实需要修改它,确保你了解这些更改的影响,并在必要时进行充分的测试。
6.1 gradle-wrapper.properties文件解读
gradle项目的wrapper目录下,有一个``文件,这个文件用来配置Gradle具体的版本和下载地址以及存放路径
- zipStore : 压缩包存放的目录
- distribution : 压缩包解压后存放的目录
- distributionUrl : Gradle的版本及下载地址,默认的是国外的下载地址,可能下载速度比较慢,可以将
URL
改为国内的 ,比如https://mirrors.cloud.tencent.com/gradle/gradle-8.2-bin.zip
7. Gradle相关的其他文章
Android Gradle开发与应用 (一) : Gradle基础
Android Gradle开发与应用 (二) : Groovy基础语法
Android Gradle插件开发_实现自动复制文件插件