gradle官方文档:https://docs.gradle.org/current/dsl/index.html
〇、gradle生命周期监听
/**
*配置阶段开始前的监听回调
*/
this.beforeEvaluate {}
/**
*配置阶段完成以后的监听回调
*/
this.afterEvaluate {
println '配置阶段执行完毕。。。'
}
/**
*gradle执行完毕后的回调监听
*/
this.gradle.buildFinished {
println '执行阶段执行完毕。。。'
}
this.gradle.beforeProject {}
this.gradle.afterProject {}
一、gradle基本概念讲解
优势:
- 灵活性好
- 粒度性上
- 兼容性
二、gradle执行流程讲解
Project的build.gradle
/**
*配置阶段开始前的监听回调
*/
this.beforeEvaluate {}
/**
*配置阶段完成以后的监听回调
*/
this.afterEvaluate {
println '配置阶段执行完毕。。。'
}
/**
*gradle执行完毕后的回调监听
*/
this.gradle.buildFinished {
println '执行阶段执行完毕。。。'
}
this.gradle.beforeProject {}
this.gradle.afterProject {}
三、Project核心API分解
代码:获取所有Project、子Project、父Project、根Project
/**
Project相关api讲解*/
this.getProjects()
def getProjects() {
println '--------------'
println '---Root Project---'
println '---------------'
this.getAllprojects().eachWithIndex { Project project, int index ->
if (index == 0) {
println "---Root Project '${project.name}'"
} else {
println "---+--- Project '${project.name}'"
}
}
}
this.getChildProject()
//获取子Project
def getChildProject() {
println '--------------'
println '---Sub Project---'
println '---------------'
this.getSubprojects().eachWithIndex { Project project, int index ->
println "---+--- Project '${project.name}'"
}
}
def getParentProject() {
def name = this.getParent().name
println "the parent project is ${name}"
}
def getRootProject2() {
def name = this.getRootProject().name
println "the root project is ${name}"
}
在根Project中操作子Project
/**
在根Project中操作子Project*/
project('app') { Project project ->
apply plugin: 'com.android.application'
dependencies {}
android {}
}
project('androidsdk') { Project project ->
apply plugin: 'com.android.library'
dependencies {}
}
//配置当前节点工程和其subproject的所有project
allprojects {
group 'com.gs'
version '1.0.0'
}
println project('Test').group
//不包括当前节点工程,只包括它的subproject
subprojects { Project project ->
}
四、文件API
/**文件API**/
//println "the root file path is " + getRootDir().absolutePath
//println "the build file path is " + getBuildDir().absolutePath
//println "the project file path is " + getProjectDir().absolutePath
//println getContent('build.gradle')
def getContent(String path) {
try {
// file(path) 相对于当前project工程开始查找
def file = file(path)
return file.text
} catch (Exception e) {
e.printStackTrace()
}
return null
}
文件拷贝:
//file copy
copy {
from file('text1')
into getRootProject().getBuildDir()
}
copy {
from file('build/outputs/apk/')
into getRootProject().getBuildDir().path + 'apk/'
//排除一些不需要拷贝的文件
exclude {}
//重命名
rename {}
}
文件树遍历:
//对文件数进行遍历
fileTree('build/outputs/logs') { FileTree fileTree ->
fileTree.visit { FileTreeElement element ->
println 'the file name is : ' + element.file.name
copy {
from element.file
into getRootProject().getBuildDir().path + '/test/'
}
}
}
五、其他API
依赖相关API
//依赖相关API
buildscript { ScriptHandler scriptHandler ->
//配置我们工程的仓库地址
scriptHandler.repositories { RepositoryHandler repositoryHandler ->
repositoryHandler.jcenter()
repositoryHandler.mavenCentral()
repositoryHandler.mavenLocal()
repositoryHandler.ivy {}
repositoryHandler.maven {
name 'phAndroid'
url 'http://localhost:8080:/xxx/xxx'
//配置账号密码
credentials {
username = 'admin'
password = 'admin123'
}
}
}
//配置我们工程的“插件”依赖地址
scriptHandler.dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
}
}
排除依赖
{
exclude module:'support-v4' //排除依赖
transitive false //禁止传递依赖
}