Gradle学习

##Gradle bulid

  • 项目Project

在Gradle术语中,一个项目(project)代表一个正在构建的组件,比如一个JAR文件,或一个想要完成的目标,如部署应用程序。
当构建进程启动后,Gradle基于build.gradle中的配置实例化org.gradle.api.Project接口,并且能够通过project变量使其隐式可用。

  • 任务Task

任务动作 task action,定义了一个当任务执行时最小的工作单元。
任务依赖 task dependency,很多时候运行一个task之前需要运行另一个task。
Gradle task对应的API是org.gradle.api.Task 接口。

  • 属性 Property

每个Project和Task实例都提供了可以通过getter和setter方法访问的属性。一个属性可能是一个任务的描述或者项目的版本。你也可以定义自己的属性。Gradle允许用户通过扩展属性自定义一些标量。

  • 几点说明
    gradle所放位置
    为什么有的是放在project目录下,有的是放在app的目录下,因为gradle引用默认的是当前路径,这样放我引用的时候就不需要去配置所引用的gradle路径,当然如果你原因放置在同一个目录下面也是OK的,只需要在apply的时候加上引用的path即可。

  • 引用位置
    为什么有的引用是放在头部,有的引用需要放置在中间,这个取决于引用的插件是否需要读取application的配置信息,如果是tinker,必须放置在中间,因为它生成patch包需要获取很多application信息,如果是packer打包的话,则不需要,这个需要格外留意一下,不然会有很多莫名其妙的错误。

  • 方法调用
    在同一个gradle脚本里面,方法调用是很简单的,但是当我们有多个gradle脚本的时候,如何相互调用彼此的方法呢,其实我之前想优化的时候,也是卡在这里,因为属性调用很简单,gradle提供了ext,所以我们可以很容易的获取其他gradle的属性(属性不要加类型限制或def关键字),如果我们现在有两个gradle,一个是first.gradle,一个是second.gradle,我想在second.gradle里面调用first.gradle中的方法,应该怎么做呢?
    只需要在first.gradle中进行如下配置

ext{ 
    test= this.&test
 } 
    def  test(){  
       println("我被调用了")
}  
然后在second.gradle中进行配置

//直接调用
   test()
//通过task调用
task CustomTask << {
    test()
}

或者
ext.test6 = {String arg1, String arg2->
    println('test6 ' + arg1 + " ," + arg2)
}
  • gradle文件中不能相互引用只能单向引用 apply from:‘xxx.gradle’

  • task 直接调用execute()可以直接执行,但是高版本是废弃了改方法的,推荐使用dependsOn taskName

  • ext{} 中设置的属性需要初始化或者指定类型否则编译不过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值