Gradle从入门到实战

由于gradle很多函数都是闭包,需要查api文档才能确定参数,这时候需要官方文档了:
http://docs.groovy-lang.org/latest/html/groovy-jdk/index-all.html
http://www.groovy-lang.org/api.html

个人总结

1、gradle版本
在Android studio的terminal中输入:
在这里插入图片描述
在这里插入图片描述

发现gradle和gradlew的版本不一致,而gradle与gradle-wrapper中配置的版本一致:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

所以在Android studio中,使用gradlew。
在项目根目录下的build.gradle文件中配置有:

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
    }

这里也有一个对gradle版本的配置,他其实是Android官方对gradle 的一个插件开发,便于开发者在Android环境下更容易的使用gradle构建项目。
用一段通俗易懂但是不是非常专业的话描述一下三者的概念、区别和联系。

  • Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。
  • Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。
  • Android Plugin for Gradle是一堆适合Android开发的Gradle插件的集合,主要由Google的Android团队开发,Gradle不是Android的专属构建系统,但是有了Android Plugin for Gradle的话,你会发现使用Gradle构建Android项目尤其的简单。

2、各文件作用

  • build.gradle
    每一个 build.gradle 脚本文件被 Gradle 加载解析后,都会对应生成一个 Project 对象,在脚本中的配置方法其实都对应着 Project 中的API,Project 类的主要结构(节选部分常用):
  • gradle.properties
    在与 build.gradle 文件同级目录下,定义一个名为 gradle.properties 文件,里面定义的键值对,可以在 Project 中直接访问。
//gradle.properties里定义属性值
company="hangzhouheima"
username="hjy"

在 build.gradle 文件里可以这样直接访问:

println "company = ${company}"
println "username = ${username}"
  • settings.gradle
    多项目构建
    前面我们介绍的例子,都是单独执行某一个 build.gradle 文件。但是我们在 Android 应用开发中,一个 Project 可以包含若干个 module ,这种就叫做多项目构建。在 Android Studio 项目中,根目录都有一个名叫 settings.gradle 的文件,然后每个 module 的根目录中又有一个 build.gradle 文件,Gradle 就是通过 settings.gradle 来进行多项目构建的。

3、属性

  • Gradle属性
    在与 build.gradle 文件同级目录下,定义一个名为 gradle.properties 文件,里面定义的键值对,可以在 Project 中直接访问。
//gradle.properties里定义属性值
company="hangzhouheima"
username="hjy"

在 build.gradle 文件里可以这样直接访问:

println "company = ${company}"
println "username = ${username}"
  • 扩展属性
    还可以通过 ext 命名空间来定义属性,我们称之为扩展属性。
ext {
  username = "hjy"
  age = 30
}

println username
println ext.age
println project.username
println project.ext.age

必须注意,默认的扩展属性,只能定义在 ext 命名空间下面。对扩展属性的访问方式,以上几种都支持。

4、Extension

//先定义一个普通的java类,包含2个属性
class Foo {
    int age
    String username

    String toString() {
        return "name = ${username}, age = ${age}"
    }
}
//创建一个名为 foo 的Extension
getExtensions().create("foo", Foo)

//配置Extension
foo {
    age = 30
    username = "hjy"
}

task testExt << {
    //能直接通过 project 获取到自定义的 Extension
    println project.foo
}

上面这个例子中,foo 就是我们自定义的 Extension 了,它里面能配置的属性与类 Foo 中的字段是一致的,在 build.gradle 中可以直接通过 project.foo 来访问。每个 Extension 实际上与某个类是相关联的,在 build.gradle 中通过 DSL 来定义,Gradle 会识别解析并生成一个对象实例,通过该类可以获取我们所配置的信息。
之前有讲过 Project 有个扩展属性是通过 ext 命名空间配置的,可以看到 ext 与这里是类似的,不同的是 ext 可以配置任何键值对的属性值,而这里只能识别我们定义的 Java 类里的属性值。

参考:
Gradle从入门到实战 - Groovy基础
Android Gradle学习(一):Gradle基础入门
Android组件化开发实践(一):为什么要进行组件化开发?
Gradle W3Cschool

发布了216 篇原创文章 · 获赞 91 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/yu75567218/article/details/101362066