首页 > 其他分享 >Gradle系列学习:Gradle的简介、常用命令和生命周期Gradle总结-生命周期

Gradle系列学习:Gradle的简介、常用命令和生命周期Gradle总结-生命周期

时间:2022-11-29 18:31:56浏览次数:70  
标签:生命周期 gradlew gradle Project 构建 build 常用命令 Gradle



一 Gradle简介

1.1 gralde

Gradle是一个项目构建工具,它可以按照一定的规则把一堆目录和文件关联起来,自动化地构建从而形成一个项目。AndroidStudio的build就是通过Gradle来实现的。

构建工具的发展历史简约回顾:很久之前我们用ant来自动化打包安卓,但jar包依赖问题处理起来很麻烦。于是有了maven,它除了自动化打包外,还可以自动下载对应的jar包依赖,但maven逻辑死板,定制麻烦。gradle兼顾两者之长,脚本灵活,成为现在安卓官方的自动化构建工具。

Gradle版本举例:gradle-6.1.1-all.zip。它通常位于:项目主目录 gradle 文件夹->wrapper->gradle-wrapper.properties。

Android Studio 的自动化构建以 Gradle 为基础,并且 ,Android Gradle 插件添加了几项专用于构建 Android 应用的功能。

Gradle版本可以在 Android Studio 的 File > Project Structure > Project 菜单中指定 ,也可以通过在 ​​gradle/wrapper/gradle-wrapper.properties​​​ 文件中指定。以下示例在 ​​gradle-wrapper.properties​​ 文件中将 Gradle 的版本设置为 6.1.1。

...
distributionUrl = https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
...

1.2 Gradle插件

Gradle插件是针对Gradle发行版和Android SDK Build Tools封装的一个工具,主要有两大功能:

  1. 调用Gradle本身的代码和批处理工具来构建项目
  2. 调用Android SDK的编译、打包功能

Gradle插件版本可在 Android Studio 的 File > Project Structure > Project 菜单中可指定,也可以在顶级 ​​build.gradle​​​ 文件中进行指定。该指定的插件版本将用于在相应 Android Studio 项目中构建的所有模块。以下示例从项目的​​build.gradle​​ 文件中将插件的版本设置为 4.0.1:

buildscript {
repositories {
// Gradle 4.1 and higher include support for Google's Maven repo using
// the google() method. And you need to include this repo to download
// Android Gradle plugin 3.0.0 or higher.
google()
...
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
}
}

 Gradle插件会有版本号,每个版本号又对应有一个或一些 Gradle发行版本(一般是限定一个最低版本)。下表列出了各个 Android Gradle 插件版本所需的 Gradle 版本。为了获得最佳性能,您应使用 Gradle 和插件这两者的最新版本:

插件版本

所需的 Gradle 版本

1.0.0 - 1.1.3

2.2.1 - 2.3

1.2.0 - 1.3.1

2.2.1 - 2.9

1.5.0

2.2.1 - 2.13

2.0.0 - 2.1.2

2.10 - 2.13

2.1.3 - 2.2.3

2.14.1+

2.3.0+

3.3+

3.0.0+

4.1+

3.1.0+

4.4+

3.2.0 - 3.2.1

4.6+

3.3.0 - 3.3.3

4.10.1+

3.4.0 - 3.4.3

5.1.1+

3.5.0 - 3.5.4

5.4.1+

3.6.0 - 3.6.4

5.6.4+

4.0.0+

6.1.1+

4.1.0+

6.5+


二 Android中常见的Gradle 命令

2.1 Gradle 查询命令

查看主要任务

./gradlew tasks

查看所有任务,包括缓存任务等等

./gradlew tasks --all

2.2 Gradle 执行命令

执行某个module [moduleName] 的某个任务[TaskName] 

./gradlew :moduleName:taskName

2.3 Gradle 快速构建命令

Gradle的快速构建命令来替代 IDE 的可视化构建操作,如我们最常用的 clean、build 等等。

查看构建版本

./gradlew -v

清除 build 文件夹

./gradlew clean

检查依赖并编译打包,注意:build 命令会把 debug、release 环境的包都构建出来。

./gradlew build

编译并安装 debug 包

./gradlew installDebug

编译并打印日志

./gradlew build --info

编译并输出性能报告,性能报告一般在构建工程根目录 build/reports/profile 下

./gradlew build --profile

调试模式构建并打印堆栈日志

./gradlew build --info --debug --stacktrace

强制更新最新依赖,清除构建后再构建

./gradlew clean build --refresh-dependencies

编译并打 Debug 包

./gradlew assembleDebug
# 简化版命令,取各个单词的首字母
./gradlew aD

编译并打 Release 的包

./gradlew assembleRelease
# 简化版命令,取各个单词的首字母
./gradlew aR

2.4 Gradle 安装命令

Release 模式打包并安装

./gradlew installRelease

卸载 Release 模式包

./gradlew uninstallRelease

debug release 模式全部渠道打包

./gradlew assemble

2.5 Gradle 查看包依赖命令

查看项目根目录下的依赖

./gradlew dependencies

查看 app 模块下的依赖

./gradlew app:dependencies

查看 app 模块下包含 implementation 关键字的依赖项目

./gradlew app:dependencies --configuration implementation

三 :gradle生命周期

在点击Android Studio右上角的大象图标(Snyc Project with Gradle Files),gralde便会为我们构建好我们的安卓工程。正如​​官网​​所说,gradle构建流程总共为三个阶段:初始化构建阶段、配置阶段、执行阶段。

3.1 初始化构建阶段

Gradle系列学习:Gradle的简介、常用命令和生命周期Gradle总结-生命周期_lua

上图是一个常见的多组件工程的Gradle Scripts,以该工程的gradle构建为例。

在点击Android Studio右上角的大象图标(Snyc Project with Gradle Files)后,gradle会为settings.gadle文件创建一个​​Settings​​对象,读取和执行settings.gadle文件中的所有配置代码:

include ':app',
':client',
':mars-core-release',
':emojilibrary',
':imagepicker',
':avenginekit',
':push',
':lvb',
':beauty',
':AliyunVideoCommon',
':AliyunPlayerBase',
':AliyunLiveShiftPlayer'
include ':lib_base_code'

​Settings​​​对象,会根据settings.gadle文件中包含的所有​​Project​​项目,去寻找其对应的build.gradle文件,并依此创建具有层次关系的Project对象。

Settings的​​官方文档地址​

Project的​​官方文档地址​

想更多地了解这两个Interface,可以去官网进一步学习,在此不赘述。

流程总结

点击构建(Snyc Project with Gradle Files),gradle会根据settings.gadle文件创建对应的Settings对象,名称就是包含settings.gradle文件的目录名,该对象根据settings.gradle文件中include:Project自动为根项目创建Porject对象,Project对象和build.gradle文件一一对应。

3.2  配置构建

执行所有project的build.gradle文件中的配置代码,下载三方,依赖,构建Task的依赖关系图。构建Task的依赖关系图是Gradle的核心。

3.3 执行构建

根据任务命令以及参数,确定要执行的任务子集,并执行。对多项目而言,每次执行任务,都需要执行前面的初始化和包含的所有项目的配置。

build.gradle中,编写代码如下可得到对应log

3.4 hook

我们有时需要在Project或Task执行的某阶段做业务处理,此时就需要hook,Gradle官方提供了以下方法:​​文档​

​void​​​ ​​settingsEvaluated()​

在settings.gradle被加载和解析时调用

​void​​​ ​​projectsLoaded(Closure closure)​

当settings.gradle包含的项目的project实例都被创建但是还未被解析时调用

​void beforeProject(Closure closure)​

当每一个Project实例被解析之前调用,注意是解析,这时Project已经被创建了

​void​​​ ​​afterProject(Closure closure)​

当每一个Project实例被解析之后调用,注意是解析,这时Project已经被创建了

​void​​​ ​​projectsEvaluated(Closure closure)​

当所有的Project实例都被解析后调用

​void​​​ ​​buildStarted(Closure closure)​

当构建开始前调用

​void​​​ ​​buildFinished(Closure closure)​

当构建结束后调用

​void​​​ ​​beforeSettings(Closure<?> closure)​

在setting.gradle 被加载和解析之前调用

​void​​​ ​​whenReady(Closure closure)​

当Tasks关系依赖图创建成功时

​void​​​ ​​beforeTask(Closure closure)​

当Task执行前调用

​void​​​ ​​afterTask(Closure closure)​

当Task执行后调用

Gradle执行流程中上述方法的执行顺序如下:

Gradle系列学习:Gradle的简介、常用命令和生命周期Gradle总结-生命周期_android_02

代码示例:

/**
* 配置阶段开始前的监听回调
*/
this.beforeEvaluate {
println '配置阶段执行前'
}

/**
* 配置阶段后的监听回调
*/
this.afterEvaluate {
println '配置阶段执行后'
}

/**
* gradle执行完毕后的回调
*/
this.gradle.buildFinished {
println '执行阶段完成后'
}


//等同于 beforeEvaluate
this.gradle.beforeProject {

}

//等同于 afterEvaluate
this.gradle.afterProject {
println '配置阶段执行完毕'
}

参考文献:

​gradle​

​gradle github​

​gradle官方文档​

​Android developers​

​​Gradle总结-生命周期​​

​​深度探索 Gradle 自动化构建技术(一、Gradle 核心配置篇)​​

标签:生命周期,gradlew,gradle,Project,构建,build,常用命令,Gradle
From: https://blog.51cto.com/u_12853553/5896538

相关文章