Android Gradle(一)简介

最近在接入Tinker热更新的时候,接触到了蛮多的 Gradle 构建脚本相关的知识,这块一直是小白,借此机会开辟一个地方记录学习

说点废话,这两年学习下来,还是感觉,新接触一个新知识,去它的官网学习还是最新最权威的最快最详细的,然后看书学习更系统博客文章之类更多还是辅助理解和解决问题比较好。

一、官网地址

二、Gradle是什么?

先看下官方的解释:

翻译一下:Gradle 是一个开源的自动化构建工具,专注于灵活性和性能。Gradle 构建脚本是使用 Groovy 或 Kotlin DSL 编写的。 之前官网的介绍是说 Gradle 是基于 Groovy 的 DSL,为啥现在又多了个 Kotlin 呢?因为 Gradle 从5.0开始,开始支持了 Kotlin DSL,现在已经发展到了7,因此我们可以使用 Groovy 或者 Kotlin 来编写 Gradle脚本。

我们都知道,Android 应用是用 Gradle 构建的,那么对于上面的描述,讨论几个问题:

  • 啥是自动化构建工具

在 Android 上的体现,简单的说就是自动化的编译、打包程序。

在上大学学习Java那会,老师为了让我们深刻的体验撸码的魅力,都是通过文本直接敲代码的,敲完之后把扩展名改成.java后缀,然后通过javac命令编译,编译通过后,在执行java命令去运行,那么这种文件一多,我们每次都得手动去操作,效率会大大的降低,这个时候就出现了自动化编译工具,我们只需要在编译工具中,点击编译按钮,编译完成后,无需其他手动操作,程序就可以直接运行了,自动化编译工具就是最早的自动化构建工具。那么随着业务功能的不断扩展,我们的产品需要加入多媒体资源,需要打不同的渠道包发布到不同的渠道,那就必须依靠自动化构建工具,要能支持平台、需求等方面的差异、能添加自定义任务、专门的用来打包生成最终产品的一个程序、工具,这个就是自动化构建工具。自动化构建工具本质上还是一段代码程序。这就是自动化构建工具的一个发展历程,自动化构建工具在这个过程中不断的发展和优化。

  • Gradle具体都干了些啥

Gradle 是 Android 的默认构建工具,Android 项目这么多东西,既有我们自己写的 java、kotlin、C++、C、Dart 代码,也有系统自己的 java、C,C++ 代码,还有引入的第三方代码,还有多媒体资源,这么多代码、资源打包成 APK 文件肯定要有一个规范,干这个活的就是我们熟悉的 gradle 了,总而言之,Gradle就是一个帮我们打包 APK 的工具。

 

  • 什么是DSL

DSL英文全称:domain specific language,中文翻译即领域特定语言,例如:HTML,XML等 DSL 语言,另外我们平时经常接触的SQL,CSS,正则表达式等等都属于DSL。而与 DSL 相对的就是 GPL,这里的 GPL 并不是我们知道的开源许可证,而是 General Purpose Language 的简称,即通用编程语言,也就是我们非常熟悉的 Objective-C、Java、Python 以及 C 语言等等。通用的计算机编程语言是可以用来编写任意计算机程序的,并且能表达任何的可被计算的逻辑,同时也是 图灵完备 的。但是在这里所说的 DSL 并不是图灵完备的,它们的表达能力有限,只是在特定领域解决特定任务的。也就是说DSL 通过在表达能力上做的妥协换取在某一领域内的高效。而有限的表达能力就成为了 GPL 和 DSL 之间的一条界限。

特点:(1)解决特定领域的专有问题(2)它与系统编程语言走的是两个极端,系统编程语言是希望解决所有的问题,比如 Java 语言希望能做 Android 开发,又希望能做后台开发,它具有横向扩展的特性。而 DSL 具有纵向深入解决特定领域专有问题的特性。

总的来说,DSL 的核心思想就是:“求专不求全,解决特定领域的问题”。

  • 什么是Groovy

Groovy 是基于 JVM 的脚本语言,它是基于Java扩展的动态语言。

基于 JVM 的语言有很多种,如:Groovy,Kotlin,Java,Scala等等,他们都拥有一个共同的特性:最终都会编译生成 Java 字节码文件并在 JVM 上运行。

因为 Groovy 就是对 Java 的扩展,所以,我们可以用学习 Java 的方式去学习 Groovy 。 学习成本相对来说还是比较低的,即使开发过程中忘记 Groovy 语法,也可以用 Java 语法继续编码。所以Java语言的特性Groovy都支持,我们完全可以混写Java和Groovy

  • Gradle与Groovy有什么区别

Gradle是基于 Groovy 的一种自动化构建工具,是运行在JVM上的一个程序,Groovy是基于JVM的一种语言,Gradle 和 Groovy 的关系就像 Android 和 Java 的关系一样。

  • 静态编程语言和动态编程语言有什么区别

静态编程语言是在编译期就要确定变量的数据类型,而动态编程语言则是在运行期确定变量的数据类型。就像静态代理和动态代理一样,一个强调的是编译期,一个强调的是运行期,常见的静态编程语言有Java,Kotlin等等,动态编程语言有Groovy,Python等语言。

这里拓展一下AOT和JIT的概念,AOT Compiler和JIT Compiler就是针对编译形式做的分类:  AOT:Ahead Of Time,指在运行前编译,比如普通的静态编译  。JIT:Just In Time,指在运行时编译,边运行边编译,比如java虚拟机在运行时就用到JIT技术  ,感兴趣的可以再深入学习下。

三、为什么要学习Gradle?

Gradle是目前Android主流的构建工具,不管你是通过命令行还是通过AndroidStudio来build,最终都是通过Gradle来实现的,所以学习Gradle非常重要。此外目前国内对Android领域的探索已经越来越深,不少技术领域如插件化、热修复、构建系统等都对Gradle有迫切的需求,不懂Gradle将无法完成上述事情。此外有时候我们在编译打包过程中也会要做一些相关的操作,所以Gradle必须要学习。

四、怎么学习Gradle?

大部分人对Gradle表示一脸懵逼,每当遇到一个问题的时候都需要从网上去查,这是一个误区。

Gradle不单单是一个配置脚本,它的背后是几门语言,即Groovy DSL和Kotlin DSL,DSL即领域特定语言,直接点说就是就是这个语言不通用,只能用于特定的某个领域,俗称“小语言”,因此DSL也是语言。在你不懂这些语言的情况下,你很难达到精通Gradle的程度。这个时候从网上搜索,或者自己记忆的一些配置,其实对你来说是很大的负担,但是把它们当做语言来学习,则不需要记忆这些配置,因为语言都是有文档的,我们只需要学语法然后查文档即可,没错,这就是学习方法,这就是正道。

所以我们主要做的就是学习Groovy的基本语法(这里不谈Kotlin),但是不用全部学习所有细节。后面的系列就围绕这个展开学习。

再说一下Groovy和Java的关系:Groovy是一门jvm语言,它最终是要编译成class文件然后在jvm上执行,所以Java语言的特性Groovy都支持,我们完全可以混写Java和Groovy。

既然如此,那Groovy的优势是什么呢?简单来说,Groovy提供了更加灵活简单的语法,大量的语法糖以及闭包特性可以让你用更少的代码来实现和Java同样的功能。比如解析xml文件,Groovy就非常方便,只需要几行代码就能搞定,而如果用Java则需要几十行代码。

五、学习过程中的博客分享

Android Groovy&Gradle

Groovy 语言快速入门

Groovy脚本基础全攻略

Gradle脚本基础全攻略

"Gradle"系列: 一、Gradle相关概念理解,Groovy基础

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值