gradle(5)-task(2)

//task依赖:task输入输出TaskInput TaskOutput对应task的两个属性inputs,outputs.

 // wirteTask和readTask通过共同操作的属性destFile关联了起来

 //gradle 规定输出属性对应的task会(生产者)先执行,输入属性对应的task后执行

ext{

    versionName='1.0.0'

    versionCode='10'

    versionInfo='App的第一个版本'

    destFile=file('realease.xml')

    if(destFile!=null && destFile.exists()){

         destFile.createNewFile()

    }

}

###//输出文件

task writeTask{

    ####//为task指定输入

    inputs.property('versionCode',this.versionCode)

    inputs.property('versionName',this.versionName)

    inputs.property('versionInfo',this.versionInfo)

    outputs.file destFile

    doLast{

    def data=inputs.getProperties()

    File file=outputs.getFiels().getSingleFile()

    ####//将map转化为实体对象

     def versionMsg=new VersionMsg(data);

     #### //将实体数据转换成xml格式数据

     def sw=new StringWriter()

    def xmlBuilder=new MarkupBuilder(sw);

    if(file.text!=null && file.text.size()<=0){//文件中没有内容

            xmlBuilder.releases{

                    release{

                            versionCode(versionMsg.versionCode)

                            versionName(versionMsg.versionName)

                            versionInfo(versionMsg.versionInfo)

                    }

            }

            file.withWriter {wirter-> Writer.append(sw.toString())}

}else{

####//已有版本

            xmlBuilder.release{

                        versionCode(versionMsg.versionCode)

                        versionName(versionMsg.versionName)

                        versionInfo(versionMsg.versionInfo)

            }

####//将生成的xml数据插入到根节点之前

            def lines=file.readLines()

            def lengths=lines.size()-1

            file.withWriter {

                lines.eachWithIndex{ String entry,int i ->

                        if(i!=lengths){

                                it.append('\r\r\n'+sw.toString()+'\r\n')

                                it.append(lines.get(lengths))

                        }

                }

        }

    }

}

}

###//输入文件

task readTask{

    inputs.file destFile

        doLast{

            def file=inputs.files.singleFile

            println(file.text())

        }

}

class VersionMsg{

    StringversionCode

    StringversionName

    StringversionInfo

}

###//测试task

tast testTast(dependsOn:[readTask,writeTask]){

    doLast{

        println("输入输出任务结束")

    }

}

###//将wirteTask挂载到build task执行之后.

this.project.afterEvaluate {

    def buildTask=project.tasks.getByName('build')

    if(buildTask==null){

        throw GradleException("thie build task is not found")

    }

    buildTask.doLast {

        writeTask.execute()

    }

}

###//执行顺序指定mustRunAfter 强制 shouldRunAfter不强制.

task taskA{

    doLast{

    println('taskA')

    }

}

task taskB{

    mustRunAfter taskA

    doLast{

        println('taskB')

    }

}

task taskC{

    mustRunAfter taskB

    doLast{

        println('taskC')

    }

}

###//task挂载到build task构建声明周期中.

taskA.mustRunAfter variantOutput.processManifest

variantOutput.processResources.dependsOn taskA

####//这样taskA就会在variantOutput.processManifest之后,variantOutput.processResources task之前.这两个task之间执行.

####//task类型project 提供的创建task 都是DefaultTask类型.具体有哪些类型可以使用查看

###官方文档.

https://docs.gradle.org

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • gradle脚本中只有task可以让配置脚本能在执行阶段执行,其他都是在配置阶段执行. task定义及配置: //...
    高斯巴阅读 2,444评论 0 0
  • 在 Android Studio 构建的项目中,基于 Gradle 进行项目的构建,同时使用 Android DS...
    Ant_way阅读 12,140评论 0 16
  • Groovy :是一种动态语言。 1:这种语言比较有特点,它和 Java 一样,也运行于 Java 虚拟机中。简单...
    PeytonWu阅读 5,507评论 0 1
  • applyplugin:'com.android.application' android { compileSd...
    飞飞小狮子阅读 5,632评论 1 0
  • 没有比较就没有伤害,有个会做早餐的妈妈是什么体验? 认识桃子很多年了,那时她是青葱明媚的女孩儿,漂亮能干又带点古灵...
    迷你欧阅读 3,452评论 0 1

友情链接更多精彩内容