【Gradle学习】—— Gradle的进阶使用

前面学习了 gradle的基础——groovy的基本语法,现在可以深入点,列个知识小点目录:

  • 闭包
    • 基础详解
      • 代码块
      • 参数 -> 左边为参数 右边为代码块 可以使用${}引用代码块
      • 返回值
      • 三个重要变量
        • this:代表闭包定义处的类
        • owner:代表闭包定义处的类或者对象
        • delegate:代表任意对象 (默认owner一致)
        • 闭包的委托策略
    • 使用详解
    • 进阶讲解
  • 数据结构
    • 列表
      • 列表排序 sort()
      • 列表查询 find() findAll() any() every() min() max()
    • 映射 - map
      • 索引:key必须为字符串,value可以为任何对象
      • 添加
      • 遍历 each
        • 直接遍历key-value
        • 遍历entery
      • 查找 find findAll collect
      • 分组 groupBy
      • 排序
    • 范围 -Range
      • List的子类
  • 面向对象
    • 接口
    • trait :和接口差不多,但是可以实现方法,不实现的方法抽象出来
    • 元编程
      • 方法:本类中没有 -> MeteClass ->是否重写MethodMissing() ->是否重写InvokeMethod()
      • 为String类添加一个反转的方法
  • 进阶使用
    • json操作
      • 对象转json:toJson()
      • json转对象:jsonSlpuer.parse()
    • xml处理
      • 解析xml:XmlSlurper.parseText(xml)
      • 生成xml:MarkupBuilder(StringWriter)
      • 遍历:
        • 深度遍历:.depthFirst().findAll{}
        • 广度遍历:.children.findAll{}
    • 作业json文件转换成xml文件
    • 普通文件操作
      • eachLine、getText、readLines :遍历文件内容
      • withReader :读取文件部分内容、不需要关闭流,内部有关流的操作
      • withObjectOutputStream:操作对象输出流
      • withObjectInputStream:操作对象输入流
  • Gradle
    • project
      • project API
        • project相关api
          • allprojects{}、project{}、subprojects{} 作用范围不同:所有project、当前project、子project(不包括当前project)
          • apply from :引入gradlec文件
        • task相关api
          •  
        • 属性相关api
          • ext{} :扩展属性
          • gradle.properties : 所有build.gradle中的属性都可以在这里定义
        • file相关api
          • 路径获取
            • getRootDir()
            • getBuildDir()
            • getProjectDir()
          • 文件操作 --同一个工程下操作
            • 文件定位
              • file() 相对于当前project中寻找
                • form file('XXXXXX') into XXXXX 拷贝文件
            • 文件遍历
              • fileTree(文件地址){}
        • gradle生命周期api
        • 其他api
          • 依赖相关api
            • buildscript{ }
              • respositories{ 仓库地址 }
              • dependencies{ 工程的插件依赖地址 }
              • exclude 排除依赖
              • transitive 传递依赖 尽量减少应用
              • compile
              • provided 编译时会引用第三方所有类 打包时 不会直接打入包中(一、只在编译阶段起作用时用 二、在主工程中有引用的情况下)
          • 外部命令执行方法
            •  
        •  
    • Task
      • 创建Task
        • 直接通过task函数创建
        • 通过TaskContainer去创建task: this.tasks.create("task名"){ }
      • Task配置:描述、分组、类型、依赖、重写、执行逻辑
      • 执行阶段 先执行外部再执行内部
        • doFirst:执行阶段执行
        • doLast:追加任务,Task前面加入执行过程
        • 计算build执行时长
      • task执行顺序
        • 同时依赖多个task ,依赖的task随机顺序执行
        • mustRunAfter 指定运行顺序
      • task输入输出
        •  
        •  
      • task类型
    • gradle其他
      • settings:gradle的初始化阶段就是执行settings.gradle中的内容
      • SourceSet:决定源码、资源、库 存放的位置
      • plugin:
        • @TaskAction:执行于gradle执行阶段的代码
      • Android 插件
        • Variants 变体
    • gradle工程
      • 迁移
      • 改造
  • 其他
    • Groovy没有网络的jar包 需要借助java中的Httpconnection之类的

对于Android开发者而言,深入gradle学习的成本较大,从业务角度考虑,不建议太深入学习,以可以写简单的gradle构建脚本和看懂复杂的脚本为目标!

1、构建块 

Gradle构建都包含三个基本构建块 project、task、property

 

一个项目(project)代表一个正在构建的组件(比如,一个jar文件)

 

  1. 项目:支持多项目构建

  2. 任务:

    1. 任务动作:定义一个当任务执行时最小的工作单元,如打印文本

    2. 任务依赖:任务之间的相互依赖

  3. 属性:新建的Task类都是Default类型的,所有的属性的都是private的,只能通过getter、setter来访问

 

2、Task的使用

    

  1. task依赖 - dependsOn

            注意:task的执行顺序是不确定的,其执行顺序又task的输入/输出规范自动确定

 

  1. 终结器Task(finalizer task)

            区分finalizer task 和 finalized task的概念

            

task taskX << {

        println 'taskX'

}

 

task taskY << {

        println 'taskY'

}

 

taskX.finalizedBy taskY

        taskX就是被修饰的,taskY修饰的,所以taskX是finalized task,taskY是finalizer task

 

        3.  Task的配置:不用定义动作或者使用左移操作符(<<),没有任何依赖关系,task配置块永远在task动作执行之前被执行,完全取决于Gradle构建的生命周期

 

3、Task构建生命周期

  1. 初始化:寻找哪些task依赖需要参与到构建中

  2. 配置:构造一个模型表示任务,并参与到构建中

  3. 执行:按Task的顺序执行

 

    构建过程中有一点要说,就是gradle的增量式构建,也是gradle的特性,前提是为每个Task定义输入(inputs)、输出(outputs),如果在执行一个Task时,它的输入与输出与前一次没有发生变化,那么该Task为最新(UP-TO-DATE),gradle不予执行。

 

    1、自定义Task

        创建一个动作方法和暴露它的配置属性,可以实现一个自定义的task

 

    2、gradle内置的task类型:Copy、Zip、Delete、War....

 

    3、声明task规则:

  1. 获得对TaskContainer的引用

  2. 调用addRule(String,Closure)--第一个参数:描述型信息,第二个参数:应用规则的闭包

     3、根据约定大于配置的特性,Gradle在buildSrc目录下使原文件结构标准化,一般将构建代码放在buildSrc目录下

     4、了解构建生命周期之后可以做点事了,可以通过hook的方式,在初始化、配置以及构建阶段,实现自己的需求

    

    6、通过监听器监听构建生命周期

  1. 编写一个特定的类实现特定的监听接口(TaskExcutionGraphListener接口提供)

  2. 注册监听器实现

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值