/** * 创建任务 */ task A{ //后执行 doLast{ println 'last' } //先执行 doFirst{ println 'first' } doLast{ println 'last1' } doFirst{ println 'first1' } } A.doLast{ } //局部变量 def aa = 'linyaokui' /** * 扩展属性 扩展属性每一个类都有 扩展属性在其他类中都可以调用 */ ext{ prop1 = '11' } ext.prop2 = '22' //给android模块 增加ext扩展属性 android.ext.prop5 = '55' /** *创建一个构建任务 <<相当后doLast后执行 */ task show << { println aa println prop1 println prop2 //调用当前项目中的ext println project.ext.prop2 //调用基gradle 中的ext (自工程可以拿到基工程中的属性 包括gradle.properties中的属性) println rootProject.ext.props_main //调用show任务里的ext println ext.prop4 //调用上面android任务先的ext println android.ext.prop5 } show.ext.prop4 = '44' /** * 任务执行周期 */ task B{ //在配置的时候执行 println 'doing block' //执行阶段执行 doLast{ println 'last' } } /** * 任务执行顺序 */ task C <<{ println 'C' } task D <<{ println 'D' } task OrderTask(dependsOn : [C,D]) <<{ println 'OrderTask' } //依赖 执行A任务肯定会执行B任务 //C.dependsOn D //当两个任务都执行时 A必须在B后面执行 //C.mustRunAfter D //当两个任务都执行时 并行编译下 A不一定在B后面执行 //C.shouldRunAfter D //执行完A后 会执行B 相当于java中的finally C.finalizedBy D /** * 自定义task */ class IncrementTask extends DefaultTask{ //定义输入输出文件 可以进行增量构建 如果输入输出文件无变化 就不会执行构建方法 @Input @Optional // 如果没有这个注解 当不写输入文件时 会报错,写了就表示这个文件是可选的 String filePath //input 可以使n个文件 目录或者属性 //输出文件 @OutputFile @Optional File file IncrementTask(){ //给任务分组 group 'aagrou' //给任务添加描述 description '任务描述' // 每次都必须执行 不跳过任务(不走增量构建模式) true的话就可以跳过 outputs.upToDateWhen {false} } //通过TaskAction注解 表示run方法会在任务执行时被调用 @TaskAction void run(){ println '自定义任务' } } //创建自定义任务 1 //tasks.create('increment',IncrementTask) //创建自定义任务 2 创建一个IncrementTask任务的增强任务increment task increment(type: IncrementTask){ filePath = 'path/to/somefile1' file = file('path.txt') } /** * gradle自带很多任务 例如 Zip Delete等等 * 下面是zip的使用 */ //task zip(type: Zip){ // archiveName 'my.zip' //压缩包名字 // destinationDir file("${buildDir}/zip") //压缩文件输出目录 // from "${buildDir}/generated" //压缩文件 //} /** * 在分析完成gradle 之后执行该方法 * 下面演示 在打包完成后将输出结果压缩 */ afterEvaluate { task zip(type: Zip){ archiveName 'my.zip' //压缩包名字 destinationDir file("${buildDir}/zip") //压缩文件输出目录 from "${buildDir}/outputs" } zip.dependsOn(tasks.getByName('assembleDebug')) } /** * gradle 构建顺序 * 1、分析构建脚本 生成settings与project类 * 2、进行初始化配置 * 3、执行任务 * * 对gradle构建生命周期 hook */ //在分析完成gradle 之后执行 在1和2之间执行 afterEvaluate { } //在1之前执行 对于引入了android插件的工程无效 beforeEvaluate { } //等同于上面两个方法 gradle.addProjectEvaluationListener(new ProjectEvaluationListener() { @Override void beforeEvaluate(Project project) { } @Override void afterEvaluate(Project project, ProjectState state) { } }) //gradle 任务执行图 gradle.addListener(new TaskExecutionGraphListener(){ @Override void graphPopulated(TaskExecutionGraph graph) { println graph.allTasks } })
gradle android的task任务配置
最新推荐文章于 2024-08-14 20:27:03 发布