Groovy
- Apache的Groovy是Java平台上设计的面向对象编程语言。
- Groovy代码动态地编译成运行于Java虚拟机(JVM)上的Java字节码,可以与其他Java代码和库进行互操作。在可运行Java的地方,就可运行Groovy。
- 可以作为Java平台的脚本语言使用,并结合了Python、Ruby、Smalltalk等语言的强大功能。脚本语言用于将应用程序连接起来,实现一些繁琐的,变动频繁的细节,如基于groovy的 gradle构建等;只需要非常少的代码,却实现了相当强大的功能。
- Groovy的语法与Java非常相似,大多数Java代码也符合Groovy的语法规则,大部分有效的Java文件也是有效的Groovy文件。
- Groovy代码比Java代码更加紧凑,因为它不需要Java需要的所有元素。
- Groovy特性包括了Java中不支持的静态和动态类型(使用关键字 def),
运算符重载,提供了lists(列表)和关联数组(maps)提供了原生语法,
原生支持正则表达式,多态迭代,字符串内嵌表达式,
添加帮助方法以及Null条件运算符 - 引入了DSL(领域定义语言)概念,简单易读,方便维护。
DSL的全称是 Domain Specific Language,即领域特定语言,或者我们可以翻译成“特定领域的语言”。
它的特性是为解决某一类任务而专门设计的语言。
Gradle
- Gradle是一个项目构建工具,可以按照一定的规则把目录和文件关联起来,自动化地构建从而形成一个项目。
- Gradle是一个开发框架,基于Groovy语言,支持各平台基于它的框架去开发定制自己编译和打包规则。
构建
- 构建
包括编译(Compile)、连接(Link)、将代码打包成可用或可执行形式等。AndroidStudio的build就是通过Gradle来实现的。
如果没有构建工具,需要在控制台通过javac先将 Java 文件编译为 class 文件,然后再用jar命令将 class 文件打包为 jar 包。
通过自动化构建工具只需要一个命令或是点一个按钮就可以打出 jar包。
如果 Android 我们不用 Gradle 命令或是按运行按钮打包。那么我们得执行多少命令才能最终打出一个 apk 包。
能够编译和打包android项目,是因为Google团队在Gradle的基础上扩展了一个Android的gradle插件。 - Gradle插件
是针对Gradle发行版和Android SDK Build Tools封装的一个工具,主要有两大功能:
1、调用Gradle本身的代码和批处理工具来构建项目
2、调用Android SDK的编译、打包功能
对比
- Ant
1、为 Java 项目提供平台构建任务,具有良好的跨平台性,用build.xml文件来配置。
2、ant不支持自动去下载配置依赖jar,不支持动态编译。
3、在项目规范上规范性不足,灵活性太高,对 build.xml 没有约定规范;
4、XML 作为构建脚本,如果项目构建较为复杂,build.xml 就会很长,难以维护。 - Maven
1、约定优于配置。对目录结构有约束,不需要自定义构建过程,配置较为简单。
2、Maven还具有生命周期,更重要的是Maven内置了依赖管理
3、缓存机制。如Android中.gradle文件。
4、缺乏灵活性: 规范性太强,缺乏灵活性,会写很多冗余配置; - Gradle
1、强大的依赖管理(基于 Apache Ivy),支持自动下载依赖包
2、具有Ant的task的强大和灵活,又有Maven的生命周期管理、规范化的构建框架和仓库,且易于使用 。
3、扩展性:脚本基于Groovy的动态DSL,支持像写脚本一样的去写项目的构建规则。
4、Gradle 是 Android 的官方构建工具,并支持许多流行的语言和技术。
5、快速构建: 二次构建只构建我们修改代码相关的类,不会耗费时间来构建整个项目;
6、高性能:Gradle使用了缓存机制来加快构建,如Android中的.gradle文件夹。
7、强大的多工程构建支持
8、对已有的 maven 和 ivy 仓库的全面支持
9、支持依赖传递管理,而不需要远程仓库或者 pom.xml 或者 ivy 配置文件
使用
- Projects和Tasks是Gradle中最重要的两个概念。
- 任何一个Gradle构建都是由一个或多个projects组成的。
- projects其实就是Idea、AndroidStudio中的Module
- tasks顾名思义就是任务,它是Gradle中的原子性操作,如编译、打包、生成javadoc等,一个project中会有多个tasks。
- Gradle的构建模块是基于task的,Gradle要做的就是按照task之间的依赖关系来组织task按照合适的顺序运行。
- Gradle Wrapper。官方建议任何 Gradle 构建方法在 Gradle Wrapper 帮助下运行。
- Gradle Wrapper 是一个脚本,调用事先已经声明的 Gradle 版本,编译前先下载它。这样本地不用再去手动安装 Gradle 环境,开发者能够快速的启动并且运行 Gradle 项目,提高开发效率。
- 可以称 Gradle Wrapper 为 Gradle 包装器,是将 Gradle 再次包装。让所有的 Gradle 构建方法在 Gradle 包装器的帮助下运行。
- Gradle评估(evaluate)和指定构建脚本时有三个固定步骤:
1、初始化(Initialization): 初始化构建所需的运行环境,并检查哪些projects参与构建
2、配置(Configuration): 将tasks组织起来,决定它们按何种顺序执行
3、执行(Execution): 执行tasks
Android
- Android 项目中跟 Gradle 相关的主要有 7 个部分:
- 根目录下的 build.gradle:顶级构建文件,配置 Gradle 版本和 Maven 依赖;
- app 目录下的 build.gralde文件:app 打包和签名配置,及模块的依赖;
- gradle 文件夹: 配置 gradel-wrapper;
- setting.gradle 文件: 添加编译的所有模块;
- gradle.projects 文件: 项目范围的梯度设置,编译内存,Gradle 并发性等设置。;
- gradlew 和 gradlew.bat 文件: Gradle 启动脚本文件;可以通过gradlew命令来打包
- .gradle 文件夹: 编译时的缓存文件夹。
命令
- 查看app模块的依赖
$ gradle app:dependencies - 编译并打Debug包
$ gradle assembleDebug - 编译app module 并打Debug包
$ gradlew install app:assembleDebug - 编译并打Release的包
$ gradle assembleRelease - 编译并打Release包并安装
$ gradle installRelease - 卸载Release包
$ gradle uninstallRelease - 排除某些任务
$ gradle clean build -x mTest
参考:
https://m.imooc.com/wiki/gradlebase-intro
https://blog.csdn.net/LiMubai_CN/article/details/102746815
https://www.jianshu.com/p/cc909d2bd13e