基于Groovy语言,Gradle采用了DSL(domain-speci clanguage)编写脚本来完成整个工程的build工作。
Project与Task
在一个Android项目中,可能会有多个模块和子库;另外项目的build工作分为多个步骤。因此,Gradle在项目的build脚本中引入了`Project`与`Task`这两个重要的概念。
在Android项目中,每个build.gradle脚本代表了一个Project;在build脚本中,我们可以定义多个Task来完成相关工作。而一个Task定义了一系列相关的操作(Action),用于完成相应的构建任务。
Build工作的生命周期
在Gradle的构建框架中,整个build工作实质上就是在执行执行配置脚本中所定义的Task。一个Task可能会依赖于其他Task的完成,因此,Gradle采用类似于DAG的模型来描述整个build工作流。在该模型中,Task按顺序依次执行,某个Task执行完毕后是不会被再次执行的。一个完整的Gradle build周期包括以下3个阶段:
- 初始化:该阶段主要完成Project对象的创建,如果有一个项目中有多个模块,则会根据相应的build脚本创建多个project对象。
- 配置:在配置阶段,Gradle将根据build脚本为每个project创建并配置整个流程中Task依赖关系图。
- 执行:该阶段中,Gradle将执行命令行参数中所指定的Task。
Gradle Wrapper
在日常工作中,我们通常需要采用多人协同的方式来完成项目的开发工作。为了保证项目组中每个开发者的build工具版本和环境都是相同的,Gradle采用了非常方便和实用的解决方案:gradle wrapper。
Gradle Wrapper提供了一个脚本文件(gradlew.bat或.sh)。当我们运行该脚本时,Wrapper将会根据当前项目指定Gradle版本自动下载安装,并自动用它对项目进行build。利用Wrapper策略,Gradle保证了当前项目的buid脚本运行在指定的版本上,开发者无需再去手动管理。
在Android Studio创建的工程中,其实已经生成好了wrapper相关的文件:
- gradlew脚本及其用到的jar
- 配置文件properties
在配置文件指定了当前工程所采用的Gradle的版本,以及它的下载地址。
小结
本章简单介绍了gradle相关的基础知识,其中主要包括了project和task的基本概念,以及gradle是如何利用gradle wrapper来保证团队开发工作中gradle版本的一致性。