Gradle随记---伊始

前言

Gradle对于android开发来说既熟悉也陌生,熟悉在于gradle已经成为android studio的默认构建工具,我们需要在build.gradle等配置文件中通过闭包申明来进行各种构建配置,而陌生在于gradle的另外一重身份,也就是编译编程框架,对于大多数开发者来说鲜于接触甚至一无所知。
因此会在接踵而至的随记中对gradle编译编程涉及最常用同时也最为重要的几个部分project,task,plugin,publish以及process来进行逐步解析,一起来对gradle的编译过程一窥究竟。

语言

正所谓工欲善其事必先利其器,在开始理解gradle前必须先了解其支持的语言,最常用的就是Java,Groovy以及Kotlin。

语法

推荐用Groovy和kotlin,kotlin实际上是Groovy的升级版,因为这两种语言会更加的简洁并且支持闭包,同时很多流行的插件也是由这两种语言来进行开发,这样以后会更便于对其源码的阅读。
这两种语言优点在于扩展了很多高阶函数比如find,any,count,drop等,这是DefaultGroovyMethods默认提供的,另外IO操作会更加简洁明了,而这是ResourceGroovyMethods提供。

file.eachLine { println "${it}"}

outFile.withOutputStream { output ->
    inFile.withInputStream { input ->
        output << input
    }
 }

闭包

闭包实际是一个可以接收参数输入,同时有结果输出的匿名代码块,每一个闭包就是一个Closure对象。
语法:{ [closureParameters -> ] statements }
我们着重来说明怎么调用gradle函数中的闭包,例如org.gradle.api.project中定义的一个函数

void subprojects(Closure var1)

我们怎么去得知这个Closure是需要传入什么参数同时输出结果是什么?很简单,在gradle中每一个闭包函数都会对应一个普通函数,因此上述闭包函数对应的就是

void subprojects(Action<? super Project> var1)

其中,Action对应的是

@HasImplicitReceiver
public interface Action<T> {
    void execute(T var1);
}

那可以清晰从中得知此Closure是一个传入参数为Project对象,返回是void的闭包。
这里语法不再做进一步细说了,Groovy和Kotlin可以自行去各自的官网学习,当然也可以就纯粹用Java进行开发,Java和Groovy以及Kotlin是无缝兼容的,因为最后都是编译成class字节码进行类装载。

开发环境

开发环境可以用android推荐的IDE(Android Studio)进行开发。这里需要说明的是,AS下载不了gradle对应的源码下来,这对于后续开发来说是一件很头疼的事情,当然也有解决的办法。

  1. maven仓库根据com.android.tools.build:gradle查找对应版本的source-jar包,下载拷贝到对应gradle-api.jar所在的目录下
  2. Gradle Releases官网下载对应的complete版本

个人推荐第二种方式,因为complete版本包含了所有源码的同时,并且包含User Manual, API Javadoc,Dsl Reference。下载解压后,通过AS的Choose Sources打开对应的源码目录。

gradle源码选择

好了,Gradle开发的前提工作都已准备完毕,下节会进入到gradle编译的世界,从Project开始一步一步揭开迷雾。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。