登录 立即注册
安币:

Android构建不一样的Gradle [复制链接]

2016-8-11 15:15
MrlLee 阅读:1161 评论:1 赞:0
Tag:  AndroidGradle

Android项目中用好Gradle,你要做到以下三点:

  1. 了解 Groovy 基本语法。
  2. 粗读 Gradle User Guide 和 Gradle Plugin User Guide
  3. 实战,实战,再实战。(三遍,你懂的)

涉及到的知识点和内容比较多,我不会一一讲解,本文主要会解答自己学习过程中的一些疑问,讲解一些相关概念和实战经验,过程中也会推荐一些有质量的博客文章。

Groovy语言

Gradle基于Groovy语言,虽然接触Gradle比较久,甚至写过一点Groovy语句,但对语言本身并不了解。为什么用Groovy呢?Groovy运行在JVM上,在Java语言的基础上,借鉴了脚本语言的诸多特性,相比Java代码量更少,Groovy兼容Java,可以使用Groovy和Java混合编程,可以直接使用各种Java类库。

Groovy语法的学习,推荐官方文章Differences with Java和IBM developerWorks的精通Groovy。了解了基本语法,对读写gradle脚本都会有帮助,比如随便举下面几个例子:

  1. 比如为何在gradle脚本中使用InputStream不用import包,而使用ZipFile需要import包?因为groovy默认import了下面的包和类,无需再import.

    java.io.*
    java.lang.*
    java.math.BigDecimal
    java.math.BigInteger
    java.net.*
    java.util.*
    groovy.lang.*
    groovy.util.*
  2. 经常看到${var1}的用法是怎么回事?
    这是Groovy中的GString,可以在双引号中直接使用,用于字符串叠加非常方便。

    def dx = tasks.findByName("dex${variant.name.capitalize()}")
  3. 下面的代码你真的能看懂吗?

    //apply是一个方法,plugin是参数,值为'com.android.application'
    apply plugin: 'com.android.application'

    /**
    *buildscript,repositories和dependencies本身是方法名。
    *后面跟的大括号部分,都是一个闭包,作为方法的参数。
    *闭包可以简单的理解为一个代码块或方法指针。
    */

    buildscript {
    repositories {
    jcenter()
    }
    dependencies {
    classpath 'com.android.tools.build:gradle:1.2.3'
    }
    }

    //groovy遍历的一种写法 each后面是闭包
    android.applicationVariants.each { variant ->
    }

Gradle概念

下面讲几个Gradle