Gradle 구축 과정 상세 설명

5182 단어 Gradle세우다
Gradle 구축 과정

위의 그림 에서 보 듯 이 Gradle 의 구축 과정 은 주로 세 단계 로 나 뉜 다.
초기 화 단계
설정 단계
집행 단계
Gradle 초기 화 시 기 를 감청 합 니 다.
이 초기 화 단계 에서 주목 해 야 할 두 가지 시기 가 있 습 니 다.
setting.gradle 실행 종료 감청

//1.setting.gradle        
gradle.settingsEvaluated {
    println "settings.gradle        "
}
빌 드 에 참여 한 Project 대상 생 성 완료 감청

//2.     Project         
gradle.projectsLoaded {
    Gradle gradle ->
        println "settings.gradle     settings   include   Project       "
}
Gradle 설정 단계 감청 시기
settings.gradle 에서 구축 에 참여 해 야 할 procject 를 설정 할 수 있 으 며 초기 화 단계 에서 해당 하 는 procject 인 스 턴 스 를 만 들 었 습 니 다.
Gradle 의 설정 단 계 는 모든 Project 에 대응 하 는 build.gradle 의 설정 코드 를 실행 하 는 것 입 니 다.
다음 API 는 설정 에 대한 리 셋 입 니 다.
gradle.beforeProject
모든 procject 가 설정 코드 를 실행 하기 전에 이 방법 을 되 돌려 주 는 것 을 나타 낸다.

gradle.beforeProject {
    Project project ->
        println ">>>>>>>>gradle beforeProject " + project.name + "        "
}
project.beforeEvaluate
현재 프로젝트 가 설정 코드 를 실행 하기 전의 리 셋
gradle.after Project 와 procject.after Evaluate 를 통 해 차이 가 많 지 않 습 니 다.

this.afterEvaluate {
    project ->
        println project.name + "       "
}
gradle.projectsEvaluated
모든 procject 가 해당 하 는 build.gradle 설정 코드 를 실 행 했 음 을 표시 합 니 다.해당 하 는 Task 의존 도 를 만 들 려 고 합 니 다.

gradle.projectsEvaluated {
    gradle ->
        println "   project      ,    Task    "
}
gradle.taskGraph.whenReady
"task 의존 관계 가 생 성 되 었 습 니 다"

gradle.taskGraph.whenReady {
    TaskExecutionGraph graph ->
        println "task         "
}
Gradle 실행 단계 감청 시기
Gradle 은 설정 단계 에서 모든 procject 의 build.gradle 설정 코드 를 실행 하고 모든 Task 작업 의 의존 관 계 를 생 성 합 니 다.다음은 실행 단계 가 되면 이 의존 관계 에 따라 해당 하 는 Task 임 무 를 수행 합 니 다.
gradle.taskGraph.beforeTask
모든 작업 작업 수행 전 리 셋

gradle.taskGraph.beforeTask {
    Task task ->
        println "Project[${task.project.name}]--->Task[${task.name}]         "
}
gradle.taskGraph.afterTask
모든 task 가 실 행 된 후에 리 셋 됩 니 다.

gradle.taskGraph.afterTask {
    task, TaskState taskState ->
        //        task    ,      
        println "Project[${task.project.name}]--->Task[${task.name}]      ,taskState[upToDate:${taskState.upToDate},skipped:${taskState.skipped},executed:${taskState.executed},didWork:${taskState.didWork}]"
}
Gradle 빌 드 실행 이 끝 난 리 셋
gradle.buildFinished
모든 임무 가 완 료 된 리 셋

gradle.buildFinished {
    BuildResult buildResult ->
        println "    "
}
build 작업 의 실행 시간 을 계산 합 니 다.
Android 에서 build 의 실행 은 가장 복잡 하고 가장 오래 실행 되 는 Task 입 니 다.build 라 는 작업 은 다른 작업 에 많이 의존 하기 때문에 첫 번 째 로 의존 하 는 작업 은 preBuild 입 니 다.따라서 우 리 는 preBuild 가 실행 되 기 전에 현재 시간 스탬프 taskStartTime 을 기록 하고 build 가 실 행 된 후에 현재 시간 스탬프 taskEndTime 을 기록 하고 싶 습 니 다.그리고 두 시간 스탬프 의 차 이 를 계산 하 는 것 은 build 작업 의 실행 시간 입 니 다.
다음은 구체 적 인 절차 입 니 다.
  • procject("app")를 통 해 app module 을 따로 설정 합 니 다
  • procject.after Evaluate 감청 procject 설정 완료.
  • getBuildTask 를 통 해 preBuild 와 build 두 작업 대상 을 가 져 옵 니 다
  • 4.567917.preBuild.doFirst 를 감청 하여 실행 을 시작 하 는 시간 스탬프 를 받 습 니 다
  • 감청 build.do Last 가 실 행 된 타임 스탬프 를 받 았 습 니 다
  • 4.567917.마지막 으로 두 개의 시간 스탬프 의 차 이 를 얻 는 것 이 바로 이 임무 의 집행 시장 이다
  • build 작업 을 수행 합 니 다
  • 
    //   app module
    project(":app") {
        Project project ->
            project.afterEvaluate {
                //  build task   
                Task buildTask = getBuildTask(project, ":app:build")
                //   preBuild   
                Task preBuildTask = getBuildTask(project, ":app:preBuild")
    
                def taskStartTime = 0
                def taskEndTime = 0
    
                // preBuild task           preBuild          action 
                preBuildTask.doFirst {
                    taskStartTime = System.currentTimeMillis()
                }
                // build task                    action 
                buildTask.doLast {
                    taskEndTime = System.currentTimeMillis()
                    println "build task     :${taskEndTime - taskStartTime}"
                }
            }
    }
    
    /**
     *    project   build  
     * @param project
     * @return
     */
    Task getBuildTask(Project project, String taskPath) {
    
        //   project  task   
        TaskContainer taskContainer = project.getTasks()
    
        //  build Task  
        Task buildTask = taskContainer.getByPath(taskPath)
    
        return buildTask
    }
    빌 드 작업 수행
    ./gradlew build
    이상 은 Gradle 구축 과정 에 대한 상세 한 내용 입 니 다.Gradle 구축 과정 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기