Gradle笔记

是什么:是一个编程工具
做什么:构建项目的工具

gradle执行流程图

  1. 初始化阶段:首先执行setting.gradle文件,读出工程有几个project,为所有的project构建对象

  2. 在配置阶段:解析所有projects对象中的task,生成有向无环图(task的依赖关系图)

    主要监听配置阶段,是gradle执行的核心

  3. 执行阶段:执行所有task及其以来的task

image-20190427150609340

生命周期监听

//配置阶段开始前
this.beforeEvaluate {
    println '配置阶段开始前'
}
//配置阶段完成后
this.afterEvaluate {
    println '配置阶段开始hou '

}

//gradle执行完毕后
this.gradle.buildFinished {
    println 'gradle执行完毕后 '

}

this.gradle.beforeProject {
    println 'beforeProject '

}

this.gradle.afterProject {
    println 'afterProject '

}

执行build(是一个task),要先执行他所依赖的task

所有的都是project

module也是project,每个poject所有一个build.gradle 文件

查看项目的所有project执行./gradlew project

根project下多个子project

根project:管理子project

子project:对应输出,例如上面的app 会对应输出一个apk,Alibrary会对应一个aar的输出

如果是Java项目每个子project对应一个jar包的生成

project API

得到所有project

this.getAllprojects()

注意:所有build.gradle和setting.gradle的代码或方法都是在配置阶段执行的

得到当前项目的所有子project

this.getSubprojects()

得到当前项目的父project

this.getParent().name

得到当前项目的根project

this.getRootProject().name

在根project的gradle文件里,寻找指定的子project方法

project(‘子project名字’)

也可以在父project里完成对子project的配置,一般不这样做

配置当前project以及他下面的所有子project

allprojects{}

配置当前project下面的所有子project

subprojects {}


apply from: 导包

project 属性api

默认属性

定义变量

扩展属性

在父project里通过subprojects给所有子project定义扩展属性

直接在根project定义扩展属性

使用根project的属性

this.rootProject.xxx,也可以直接使用父类属性(继承关系)

把所有属性定义在一个gradle文件里,然后引入


引入gradle文件

使用属性

在gradle.properties里定义扩展属性


使用

注意:定义在这里的属性直接拿到的时候object,要转一下类型才能用
xxx.toInteger() xxx.toBoolean()

file文件api

注意:只支持在同一个项目里进行copy,不能脱离这个项目
跨工程可以用groove的方法

获取目录路径

file(path)


注意这个方法传入的是相对路径

拷贝

文件拷贝

copy {
    from file("src/main/AndroidManifest.xml")
    into getRootDir()
}

文件夹拷贝

拷贝其他操作

文件树遍历

遍历apk目录下的所有文件,打印每一个文件的名字(element是文件节点)
并且把每一个文件拷贝到test文件夹里面的

依赖相关api

buildscript

一般都是闭包的简略写法,这里为了理解,全部把参数写出来

配置仓库地址

简单写法

buildscript {
    ext.kotlin_version = '1.3.10'
    repositories {
        google()
        jcenter()
    }

Maven仓库配置

简写

buildscript里的dependencies为工程引入插件地址

与project里的dependencies不同,为程序引入第三方库地址

依赖冲突

compile和provided的区别

compile 在打包后,会把依赖内容达到apk里
provided (占位编译)只会在编译器使用这个依赖,不会打包到apk里
一个使用场景是

  1. 只在编译器起作用,不在运行期起作用
  2. 如果主工程所依赖的库工程中的依赖库已经在主工程中已用过了,那么在库过程中就不需要再次通过compile引入这个依赖了,而是应该通过占位编译方式provided,让在编译过程中通过,但是在不要打包到apk,因为最后使用的是主工程里的依赖 ,减少apk大小

执行外部命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值