使用gradle编译android,很多时候,我们不清楚里面到底执行哪些操作及各个阶段的消耗的时间,
因此有个打印gradle的各个task的耗时及输入输出的文件对了解gradle很有帮助:
class TimingsListener implements TaskExecutionListener, BuildListener {
private Clock clock
private timings = []
@Override
void beforeExecute(Task task) {
clock = new org.gradle.util.Clock()
if (task.outputs.files.files) {
task.project.logger.warn "taskName:${task.name} "
task.project.logger.warn "inputs.files.files:-----------start------- "
task.inputs.files.files.each {
task.project.logger.warn "${it.absolutePath} "
}
task.project.logger.warn "inputs.files.files: -----------end---------- "
}
}
@Override
void afterExecute(Task task, TaskState taskState) {
def ms = clock.timeInMs
timings.add([ms, task.path])
task.project.logger.warn "${task.path} took ${ms}ms"
if(task.outputs.files.files) {
task.project.logger.warn "taskName:${task.name}"
task.project.logger.warn "outputs.files.files: ------------start----------------- "
task.outputs.files.files.each {
task.project.logger.warn "${it.absolutePath} "
}
task.project.logger.warn "outputs.files.files: ---------------end------------------ "
}
}
@Override
void buildFinished(BuildResult result) {
println "Task timings:"
for (timing in timings) {
if (timing[0] >= 50) {
printf "%7sms %s\n", timing
}
}
}
@Override
void buildStarted(Gradle gradle) {}
@Override
void projectsEvaluated(Gradle gradle) {}
@Override
void projectsLoaded(Gradle gradle) {}
@Override
void settingsEvaluated(Settings settings) {}
}
gradle.addListener new TimingsListener()
参考:
http://jiajixin.cn/2015/08/07/gradle-android/