gradle (groovy)及常见命令

Android Studio 的编译构建,是基于Gradle的, 而Gradle又是基于Groovy, Groovy又是基于Java的。

Groovy基本语法理论介绍

Gradle是一种基于Groovy语言(DSL)来声明的,所以我们很有必要先了解下Groovy 语言。Groovy 语言是用于Java虚拟机的敏捷语言,是可以用于面对对象编程,又可以用作纯粹的脚本语言,同时有具有闭包和动态语言的其他特性。

基本特性:

  1. Groovy 完全兼容java语法
  2. 末尾的分号是可选的
  3. 类、方法默认是public的
  4. 编译器会自动添加getter/setter方法
  5. 属性可以用.号获取
  6. 最后一个表达式的值会作为返回值的,return关键字可省略
  7. ==等同于equals(),不会有NullPointerExceptions
  8. 在Groovy中使用def关键字定义的变量类型都是Object,
    定义方法时,通常可以省略def关键字,尽量别def和类型混用,避免这种写法def String name = “Guillaume”。def类似js中的var

高效特性

  1. assert 断言语句 可以写在任何地方
  2. 可选类型定义,相当于若类型语言 ,类型会自动推导出来的
  3. 可选的括号 ,方法如过有有参数,()可以不写
  4. 字符串 有三种 分别为 ‘’ 、 “” 、 ‘’’ ‘’’ ,引用${}
  5. 闭包

参考:

apache groovy官方文档
Gradle DSL语法官方文档
使用Groovy开发之新特性
任玉刚:Gradle从入门到实战 - Groovy基础
刘望舒:Gradle核心思想(三)Groovy快速入门指南
Android构建02-Groovy基础
Gradle系列之Groovy基础篇
Android Gradle Groovy自动化构建入门篇

Gradle Android-build 常用命令参数及解释

一句话表明Groovy的地位:Groovy于Gradle,好比Java于Android

gradle 任务查询命令

# 查看任务
./gradlew tasks
# 查看所有任务 包括缓存任务等
./gradlew tasks --all
# 对某个module [moduleName] 的某个任务[TaskName] 运行
./gradlew :moduleName:taskName

说明,module 定义在 工程根 settings.gradle 下

快速构建命令

# 查看构建版本
./gradlew -v
# 清除build文件夹
./gradlew clean
# 检查依赖并编译打包
./gradlew build
# 编译并安装debug包
./gradlew installDebug
# 编译并打印日志
./gradlew build --info
# 译并输出性能报告,性能报告一般在 构建工程根目录 build/reports/profile
./gradlew build --profile
# 调试模式构建并打印堆栈日志
./gradlew build --info --debug --stacktrace
# 强制更新最新依赖,清除构建并构建
./gradlew clean build --refresh-dependencies
#强制刷新依赖:
./gradlew --refresh-dependencies assemble

#多任务调用:
./gradlew clean jar

#查看帮助:
./gradlew -?或./gradlew -h或./gradlew -help

gradle 指定构建目标命令

# 编译并打Debug包
./gradlew assembleDebug
# 这个是简写 assembleDebug
./gradlew aD
# 编译并打Release的包
./gradlew assembleRelease
# 这个是简写 assembleRelease
./gradlew aR

gradle 构建并安装调试命令

# 编译并打Debug包
./gradlew assembleDebug
# 编译app module 并打Debug包
./gradlew install app:assembleDebug
# 编译并打Release的包
./gradlew assembleRelease
#  Release模式打包并安装
./gradlew installRelease
# 卸载Release模式包
./gradlew uninstallRelease

gradle 查看包依赖

./gradlew dependencies
# 或者模组的 依赖
./gradlew app:dependencies
# 检索依赖库
./gradlew app:dependencies | grep CompileClasspath
# windows 没有 grep 命令
./gradlew app:dependencies | findstr "CompileClasspath"

# 将检索到的依赖分组找到 
# 比如 multiDebugCompileClasspath 就是 multi 渠道分发的开发编译依赖
./gradlew app:dependencies --configuration multiDebugCompileClasspath
# 一般编译时的依赖库,不是固定配置方式,建议检索后尝试
./gradlew app:dependencies --configuration compile
# 一般运行时的依赖库,不是固定配置方式,建议检索后尝试
./gradlew app:dependencies --configuration runtime

gradle中的task执行顺序

在 Gradle 中,最重要的两个概念是 Project(项目) 和 Task(任务)。
每一次构建都至少包含一个 Project,每一个 Project 又包含了一个或多个 Task。
每个 build.gradle 文件都代表一个 Project,其实 Project 可以理解为在业务范围内,
被抽象出来的一个个独立的模块。而 Task 一般被定义在 build.gradle 中,它表示一个操作,
比如:复制文件、打个 jar 包、上传文件等。

参考:gradle中的task

优先顺序为depensOn > 自己 > doFirst > doLast > “>>符号”

task task2{
    println "task2"
}


task task3{
    println "task3"
}


task task4{
    println "task4"
}


task task1(dependsOn:[task2,task3,task4]){
    println "task1"
    doFirst{
        println "task1 first"
    }
    doLast{
        println "task1 last"
    }
}

//注:操作符<< 用在Task定义上相当于doLast
task1 <<{
   println "task1 append"
}


//输出结果
task2
task3
task4
task1
task1 first
task1 last
task1 append

f.排序:除了通过强依赖dependsOn来控制任务的执行顺序,
还可以通过 shouldRunAfter 和 mustRunAfter 实现

taskB.shouldRunAfter(taskA) 
//表示taskB应该在taskA执行之后执行,有可能不会按预设执行

taskB.mustRunAfter(taskA) 
//表示taskB必须在taskA执行之后执行

猜你喜欢

转载自blog.csdn.net/sinat_31057219/article/details/94136447
今日推荐