Android开发-gradle总结

参考资料:

http://www.infoq.com/cn/articles/android-in-depth-gradle/

笔记:

1.gradle中每一个待编译的工程成为一个Project,每一个Project由许多Task组成,编译一个工程,就是执行这些Task,完成响应的任务

2.每一个工程包含一个build.gradle文件,根目录包含一个settings.gradle文件,主要用于设置编译那些工程

3.gradle命令介绍:

  • gradle projects:查看子工程信息
  • gradle tasks:查看任务信息
  • gradle task-name:执行某个task

4.gradle的工作流程:

  • 初始化阶段:执行settings.gradle文件,在setting文件中可以写一个需要提前执行的方法,比如读取配置文件等
  • Configuration阶段:这个阶段主要解析每个Project中的build.gradle文件,该阶段结束后,整个build的project以及内部的Task关系就确定了,形成一个有向图,可以添加一个Hook,在Task关系图确定后,执行一些操作
  • 执行阶段
  • 常见的Hook函数:
    allprojects {
        afterEvaluate { project ->
            println "define in root project : after ${project.name} evaluate"
        }
        beforeEvaluate { project ->
            println "define in root project : before ${project.name} evaluate"
        }
    }
    
    gradle.settingsEvaluated { settings ->
        println "emit by gradle : Setting evaluated"
    }
    
    gradle.projectsLoaded { gradle ->
        println "emit by gradle : project loaded"
    }
    
    gradle.beforeProject { project ->
        println "emit by gradle : before ${project.name} evaluate "
    }
    
    gradle.afterProject { project ->
        println "emit by gradle : after ${project.name} evaluate "
        
    }
    
    gradle.projectsEvaluated { gradle ->
        println "emit by gradle : all project evaluated "
    }
    
    gradle.taskGraph.whenReady { graph ->
        println "task graph is ready"
        graph.getAllTasks().each {
            println "task ${it.name} will execute"
        }
    }
    
    gradle.taskGraph.beforeTask { task ->
       println "before ${task.name} execute" 
    }
    
    gradle.taskGraph.afterTask { task ->
        println "after ${task.name} execute"
    }
    
    gradle.buildFinished { buildResult ->
        println "emit by gradle : build finished"
    }
    
    println "all project size : ${allprojects.size()}"
    

5.gradle构建过程中的3个对象:

  • setting对象:settings.gradle文件会对应一个setting对象
  • project对象:每个project的build.gradle会对应一个project对象
  • gradle对象:整个构建过程会有一个gradle对象

6.ext属性:gradle中在第一次定义属性的时候加上ext属性,这样就可以在其他gradle文件中跨脚本读取

7.Task:自定义Task,doLast,doFirst

猜你喜欢

转载自blog.csdn.net/qq_19694479/article/details/80336325