Gradle系列学习: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.32.2.1 - 2.3
1.2.0 - 1.3.12.2.1 - 2.9
1.5.02.2.1 - 2.13
2.0.0 - 2.1.22.10 - 2.13
2.1.3 - 2.2.32.14.1+
2.3.0+3.3+
3.0.0+4.1+
3.1.0+4.4+
3.2.0 - 3.2.14.6+
3.3.0 - 3.3.34.10.1+
3.4.0 - 3.4.35.1.1+
3.5.0 - 3.5.45.4.1+
3.6.0 - 3.6.45.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 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执行流程中上述方法的执行顺序如下:

代码示例:

/**
 * 配置阶段开始前的监听回调
 */
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 核心配置篇)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许进进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值