Gradle相关知识总结

Gradle简介

Gradle,是一个基于 JVM 的富有突破性构建工具,基于 groovy,其 build 脚本使用 groovy dsl 编写!
任何一个 Gradle 构建都是由一个或多个 project组成。每个 project 包括许多可构建组成部分,由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作,如编译,打包等。

构建简单Task

task hello << {
    println 'Hello world!'
}
//Android Studio命令行执行gradlew hello 输入: Hello world!

//将 test文件夹里的内容copy到dest文件夹里
task copyFile(type: Copy){
    from 'test'
    into 'dest'
}

在两个任务之间指明依赖关系

task A << {
    println 'Hello world!'
}
task B(dependsOn: A) << {
    println "I'm Gradle"
}

上面表示B依赖于A,运行B时会先执行A。

Gradle一些常用Task

projects 和 tasks是 Gradle 中最重要的两个概念,可以通过gradlew tasksgradlew projects运行

gradlew tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Android tasks
-------------
androidDependencies - Displays the Android dependencies of the project.
signingReport - Displays the signing info for each variant.
sourceSets - Prints out all the source sets defined in this project.

Build tasks
-----------
assemble - Assembles all variants of all applications and secondary packages.
assembleAndroidTest - Assembles all the Test applications.
assembleDebug - Assembles all Debug builds.
assembleRelease - Assembles all Release builds.
build - Assembles and tests this project.
classes - Assembles main classes.
clean - Deletes the build directory.
jar - Assembles a jar archive containing the main classes.
testClasses - Assembles test classes.

...

To see all tasks and more detail, run gradlew tasks --all

To see more detail about a task, run gradlew help --task <task>


BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed

从上面运行结果可以看到各个task的名称和作用,如dependencies用于显示Project的依赖信息,projects用于显示所有Project,包括根Project和子Project,而properties则用于显示一个Project所包含的所有Property。

自定义Task

创建Task可以由多种方式实现:

task hello << {
    println "hello world"
}

project.task('hello ').doLast {
    println "hello world"
}

project.tasks.create('hello ').doLast {
    println "hello world"
}

以上三种方式都可以创建task.

  • doFirst:task执行时,最开执行的操作
  • doLast:task执行时,最后执行的操作

另外,自定义task默认分组other,可以为task指定分组:

task("hello3", group: "android").doLast {
    println("hello3")
}

效果图
在这里插入图片描述

Gradle执行时序

Gradle执行分为两个阶段:配置和执行
配置:首先解析settings.gradle, 解析各个moudle并为其创建project实例,然后读取所有build.gradle文件的所有内容来配置Project和Task等,比如设置Project和Task的Property,处理Task之间的依赖关系等。
执行:根据各个task依赖关系,执行task

task hello1 {
    println("hello11")//编译阶段执行
    doLast {//执行阶段
        println("hello111")
    }
}

task hello2  {
    println("hello22")
    doLast{
        println("hello222")
    }
}
//hello1依赖hello2  执行hello1时会先执行hello2
hello1.dependsOn(hello2)

运行结果如下

> Configure project :app 
hello11
hello22

> Task :app:hello2 
hello222

> Task :app:hello1 
hello111


可以发现,先对各个任务进行配置,执行时被依赖的task优先执行

自定义Project属性

Gradle在默认情况下已经为Project定义了很多Property,其中比较常用的有:

  • project:Project本身
  • name:Project的名字
  • path:Project的绝对路径
  • description:Project的描述信息
  • buildDir:Project构建结果存放目录
  • version:Project的版本号
version = "1.0.0"
description = "test"
task showProjectProperties << {
    println version
    println project.description
}
1.0.0
test

自定义额外属性时,需要借助ext

ext.costomProp1 = "The first prop"
ext{
    costomProp2 = "two"
}
task showCostomProp <<{
    println costomProp1
    println costomProp2
}
The first prop
two
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值