Gradle 入门到精通(二)
来源:互联网 发布:三星公司 ge矩阵法 编辑:程序博客网 时间:2024/06/14 07:09
前言
根据前一篇我们学习了gradle的基础知识和项目结构,我们知道了一个内容,就是android 的项目使用的是gradle进行项目管理,项目中最重要的就是build.gradle setting.gradle。如果需要了解gradle的内容,就需要了解gradle的执行流程,也就是gradle的生命周期。
6 gradle生命周期分析
gradle的执行过程分成了三个部分
- 1 初始化构建
- 2 配置构建
- 3 执行构建
- 4 完成构建或者失败
6.1 初始化的工作
gradle 支持单一和多项目构建,在这个初始化的阶段,gradle就根据一些机制来判断当前构建的项目是单项目还是多项目。在android的插件里,初始阶段是根据setting.gradle 的配置来判断的。
include ':app', ':app2', ':libery','testeclipse2as'
上面的话是我的项目中的配,include代表需要编译的project,一共有4个项目需要参与编译。
一句到底,就是初始化阶段,就是去读取项目的setting.gradle。项目开始构建的时候,就会创建一个gradle对象,下面的是这个对象的api和属性。
https://docs.gradle.org/current/javadoc/org/gradle/api/invocation/Gradle.html#afterProject(org.gradle.api.Action)
6.2 配置构建的工作
在上面的初始化完成后,gradle知道了需要构建的各个项目,于是gradle会尝试读取每一个项目,并将每个项目的 build.gradle 变成一个project对象,这个project就对应了这个build.gradle文件,接着确认好项目的依赖关系,下面这个是project的文档。
https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html
gradle.afterProject( { project -> println("this projcet name is = "+project.getName()) println("this projcet path is = "+project.getPath()) })
afterProject 什么意思呢?就是当gradle初始化完成后,开始执行project后会执行这个方法,我们看到这个方法接收的是一个闭包。
project这个类里面有一个方法,叫afterEvaluate,这个方法是当这个project被执行的到时候就回调这个方法。
我们在某一个项目中的build.gradle文件中添加这个方法:
6.3 执行构建的工作
每个项目都有一个个的task(任务),每个任务之间都有相应的关系。执行构建的工作就是执行工作的任务,在执行任务的过程中,gradle会把这个任务的依赖的任务逐个执行。
上图显示的是当前项目所有的可执行的任务,如果我们选择build的菜单的话,就会选择执行构建里面的任务。我们可以使用下面的命令来查看
./gradlew tasks --all
包括我们在android studio上面点击的安装按钮。实际也是通过我们的install命令。
未完待续…..
- Gradle 入门到精通(二)
- Gradle 入门到精通(二)
- Gradle 入门到精通
- Gradle 入门到精通(一)
- Gradle 入门到精通(三)
- Gradle 入门到精通(四)
- Gradle 入门到精通(三)
- Gradle 入门到精通(四)
- Ajax入门到精通(二)
- mybatis 入门到精通(二)
- Raphaeljs入门到精通(二)
- ActiveMQ从入门到精通(二)
- Spring入门到精通(二)
- ActiveMQ从入门到精通(二)
- 二---JNI入门 - NDK从入门到精通(2)
- Google搜索从入门到精通 v4.0(二)
- JavaScript教程--从入门到精通(二)
- Google搜索从入门到精通 v4.0 (二)
- 如何用transition实现鼠标移到一行字从左往右伸出一条线,离开时又缩回原样(分析两种情况)?
- git教程-4-管理修改
- Python+Selenium 操作示例——鼠标悬停显示二级菜单,再点击二级菜单或下拉列表
- 【吭哧吭哧算法】冒泡排序
- php中 session存储用户信息
- Gradle 入门到精通(二)
- maven 启动项目 Document base Maven Webapp does not exist or is not a readable directory
- 快速的判断一个数的二进制中有多少个1,快速判断x是不是2^n
- iOS NSDictionary,JSON和XML互相转换
- 关于MIPI转RGB/LVDS(ICN6211/ICN6202)芯片的使用技巧
- java4种线程池的使用
- Notification通知点击无效,无法跳转问题
- 用CSS对DIV画三角形
- C++primer 第十四章笔记 初稿