Gradle实战一:Project详解及实战

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 //禁止传递依赖
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值