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 작업 의 실행 시간 입 니 다.
다음은 구체 적 인 절차 입 니 다.
// 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 구축 과정 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin ReflectionReflection is a set of language and library features that allows for introspecting the structure of your own program at ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.