Gradle

Gradle

gradle入门:liuwangshu.cn/application…

使用as创建gradle插件项目:blog.csdn.net/a646796992/…

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

gradle执行流程图

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

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

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

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

生命周期监听

//配置阶段开始前
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大小

执行外部命令

Task

Task定义和配置
查看项目中的task

./gradlew tasks

定义Task

方式一:直接通过Task函数创建

task helloTask{
    print('I am a Task...')
}
复制代码

执行Task

.gradlew xxxtask

方式二:直接通过TaskContainer容器创建

this.tasks.create(name:'HelloTask2'){
    print('I am a Task2...............')
}
复制代码
TaskContainer 管理-查找-添加-创建Task

查询Task

创建Task

配置Task

group 分为一个组

其他配置

在Gradle执行阶段执行代码 doFirst doLast

执行顺序:先外部在内部

一个例子:计算build执行时长

在系统的task执行前后使用doFirst doLast,执行我们自己的语句

####为什么第一个task是preBuild

build Task 执行了多少task

执行顺序,依赖指定方法

方式一:静态指定,定义时候就知道要依赖哪一个task==>通过dependsOn

指定了依赖之后,执行taskZ,会先执行taskX,taskY 也可以通过下面的方法来指定依赖

方式二:动态指定,开始定义不知道要依赖哪一个,通过代码输出来指定依赖===>内部通过dependsOn方法

依赖所有以lib开头的task

小例子

解析这个xml文件,把每个xml节点输出到一个文件里

开始写task

再写一个task测试上面的task

修改

执行结果

task输入输出

input :是所有的数据类型和文件

output:只能是文件

输入输出例子

主要看这里 会先执行输出属性,在执行输入属性 先writeTask再readTask

新建一个测试task,依赖了两个task,而readTask和writeTask之间有输入输出关系,依赖先执行,输出先执行,再执行输入

方式三 执行顺序 mustRunAfter

可以指定多个 数组方式

如何将自己的task插入到系统的构建task之间

自己的manifestTask在processManifest之后运行 processResources还依赖了manifestTask 那么manifestTask在processResources和processManifest之间运行

task总结

持续集成工具 Jenkins

安装

  1. 一 创建环境变量

默认的安装目录不好

2. 下载、执行war包

jenkins.io/download/

3. 浏览器输入localhost:8080,输入密码即可

配置

安装下面几个插件

点击安装

完成之后,配置一个新的账户密码(不再用之前的那个密码的给你录了),然后下一步

开始配置

JDK 配置

jdk地址为

其他插件配置都类似

新建任务

其他

SourceSet

约定大于配置 不配置就是用约定

  1. jni目录默认在jinlibs里,修改为libs

2.创建多个资源文件夹,分模块

也可以在外部添加sourceset代码

android对gradle的扩展

公共属性

Application变体的属性

修改apk名字

获取变体的task variant.taskname

例子

比较靠前的task checkMenifest

gradle 迁移

两种方式,一般用第二种改造

迁移

直接迁移,会自动生成以下的配置,指定新的源码、资源等的位置

改造

直接把eclipse项目的源码、资源、lib复制到新的gradle项目中对应的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值