美文网首页
Gradle基础知识

Gradle基础知识

作者: Bernardo_Silva | 来源:发表于2019-03-17 14:31 被阅读0次

    Gradle中的依赖方式有以下几种:

    • implementation
    • api (相当于Gradle3.0之前compile)
    • compileOnly (相当于Gradle3.0之前provided )
    • runtimeOnly(相当于Gradle3.0之前apk)

    其中implementation和api在前面可以加上debug,release或者test声明,例如debugApi

    详细说明:

    • 使用implementation依赖可以减少构建时间,例如Module A implementation Module B,Module B implementation Module C,此时A无法引用中的内容。当C发生改变时,A不需要重新编译。
    • 使用api的依赖,还是上面的例子,A可以引用C中的内容。
    • compileOnly的依赖只有编译时可以用,不会打包到apk(注释处理器等)
    • runtimeOnly的依赖编译时不可用,会打包到apk

    基本语法

    第一手资料 Groovy APIGradle Doc

    下面列出几个常用的和Java区别比较大的:

    • with,给对象赋值
    obj.with {
       name = "android"
       phone= "145555555"
    }
    
    • 和python相似的判断true或false
    if (str) { }
    
    • kotlin相似的判空
    obj?.setData()
    
    • 使用each遍历Map或List
    map.each {
       println "map:[${it.key} : ${it.value}]"
    }
    
    • XmlParser解析Xml
    def xml = new XmlParser().parse(new File("test.xml"))
    // 访问view节点的name属性
    println xml['view'].@name[0]
    
    • 在android studio中直接运行Groovy,使用命令gradlew test
    task(test).doLast {
        println "start execute yuangshuo"
        getString()
    }
    
    def getString() {
    }
    

    更多基础语法:
    Groovy快速入门指南
    Gradle脚本基础全攻略

    Gradle生命周期和执行顺序

    Gradle的生命周期分为3个阶段:Initialization、Configuration和Execution

    1. 首先解析settings.gradle来获取模块信息(Initialization阶段)
    2. configure项目中top-level的build.gradle,然后configure每个module的build.gradle,配置的时候并不会执行task,一个module执行configure结束会执行project.afterEvaluate(Configuration阶段)
    3. 按configure顺序执行(Execution阶段)
    // 打印日志顺序
    setting##init
    top-level##init
    app##init
    app##afterEvaluate
    common##init
    app##task
    

    详细学习:Gradle基础 - 构建生命周期和Hook技术

    常用Api

    定义Task
    • 第一种方式
    task myTask {
        println "config myTask"
    }
    
    myTask.doLast {
        println "after execute myTask"
    }
    
    myTask.doFirst {
        println "before execute myTask"
    }
    

    执行一个task时,都会先执行task的配置,doFirst是在task开始执行之前,而doLast则是在执行后,两者都是在task配置之后执行的,因为执行任意一个task,都需要先配置一遍。每个task执行之前都需要进行一遍完整的配置。

    • 第二种方式
    class MyTask extends DefaultTask {
        @TaskAction
        def hello() {
            println "Hello world."
        }
    }
    task taskname(type : MyTask)
    

    @TaskAction表示task要执行的动作

    • 第三种方式
    project.task('myTask').doLast {
        println "after execute myTask"
    }
    
    Task依赖
    task taskA(dependsOn: 'taskB') {
        doLast {
            println 'taskA'
        }
    }
    
    task taskB {
        doLast {
            println 'taskB#1'
        }
    }
    
    taskB.doLast {
        println 'taskB#2'
    }
    

    执行gradlew taskA,打印结果

    > Task :app:taskB 
    taskB#1
    taskB#2
    
    > Task :app:taskA 
    taskA
    
    

    一个Task执行前先执行其依赖的Task,doFirst和doLast可以被执行多次

    Gradle命令:

    • gradlew project:列出项目module名称
    • gradlew build:执行build操作
    • gradlew taskname:执行某个task
    • gradlew -x taskname:执行build操作但排除某个task
    • gradlew tasks:列出项目中所有任务
    • gradlew help –task taskname:显示某个task的详细信息

    Gradle日志级别

    • Error 错误级别
    • Quiet 重要级别
    • Warning 警告级别
    • LifeCycle 进度信息
    • Info 信息性信息
    • Debug 调试信息

    gradlew -q taskname 可以控制日志输出级别

    相关文章

      网友评论

          本文标题:Gradle基础知识

          本文链接:https://www.haomeiwen.com/subject/awtumqtx.html