前言
从 Eclipse 转 Android Studio 已经有很长一段时间了,期间也尝试过从把公司的项目在两个 IDE 之间进行过转换,还是有一些坑和心得体会的。我们都知道 Android Studio 是 Google 力推的开发 IDE ,其中主要的特性之一是项目的构建是基于Gradle 的。一直以来都在使用各种 gradle.build 文件,对其中的一些东西还是掌握的不够。加之最近在看 Android 和 Gradle 的官方文档,索性就整合成一个系列,本系列会紧密结合 Android 开发。如需详细学习 Gradle,请阅读 用户指南。
1、Gradle介绍
Gradle 是一个基于 JVM 的构建工具,功能类似于 Ant 或着 Maven 。它使用基于 Groovy 的特定领域语言(DSL)来声明项目的一些配置,不同于 Maven 使用 XML 进行项目配置。因此,它需要 JDK 的支持,这意味着它能运行于目前大多数操作系统之上;另一方面,Gradle 的核心是一个基于依赖编程的语言 ( We said earlier that the core of Gradle is a language for dependency based programming.)。
2、Gradle安装
Gradle的安装,两种方式:
- 使用包管理器进行安装
- 手动安装,下载压缩包解压,需要配置环境变量
下载完,可以进行验证,这一部分请参考官方文档
3、Gradle的特性
Gradle 拥有众多的特性,来帮助用户进行快速构建项目,例如在性能方面:
- 增量构建(Incremental Builds), 构建过的任务,当输入、输出或配置没有发生变化不会再次构建
- 任务输出缓存(Task Output Caching),任务构建后的输出会被缓存起来,以便复用
- 编译器守护(Compiler Daemon),Gradle 可以通过开启守护进程加快构建速度
- 并行执行(Task Output Caching),Gradle 可以开启任务并行执行来获得性能的提升
- 依赖并行下载(Task Output Caching)
此外,还提供命令行接口进行任务执行、持续构建(Continuous build),对依赖进行缓存、动态依赖、版本冲突解决,针对跨团队管理能够进行自配置构建环境(可以通过 Gradle wrapper指定 Gradle版本)。
4、Android Plugin
针对不同生态,例如JVM、Android、C++、Swift、Objective-C,都有其特定的特性,这些特性主要是由相应的插件来完成,比如 Android 的 Build Tool,我们都会在每个 Android 项目的根目录下的 build.gradle 中看到这样的配置:
|
|
它指定了 Gradle Android Plugin 的版本信息,不同版本的插件版本有不同的特性,比如 Instant Run 需要 2.3.0 或更高的版本。因此,我们的Android项目的构建工作需要 Gradle 以及 Gradle Android Plugin 一起搭配来完成,两者版本的配置表可以参考 Android开发者官网#Update Gradle 。通过 Android Plugin, 你可以使用到多种(功能)特性:
- 构建变体(Build Variants),通过构建类型和产品风味的配置来完成
- 配置清单合并(Manifest Merging),完成Manifest文件以及资源文件的自动合并
- Android 库工程(Android Library Projects),支持多个工程(multi-projects)的构建
- 变体依赖管理(Per-Variant Dependency Management),可以针对每个变体进行依赖声明
- 应用签名(Application Signing),为应用进行自动签名
- 混淆支持(ProGuard Support),轻松为应用进行代码混淆和压缩APK
- 单元测试(Unit Testing),支持单元测试
- 设备功能测试(On-device Functional Testing)
- APK分片(APK Splits),对于不同分辨率的设备或 ABIs (Application Binary Interfaces) 生成APK,并复用构建输出
- Multidex支持(Multidex Support),避免单个 DEX 文件方法超过 65k 的限制
- NDK支持(NDK Support),可以基于本地库进行 Android 开发
- 数据绑定(Databinding),使用数据绑定能够自动的把数据更新到 View 上
Gradle Android Plugin 的源码可以通过在 app 工程的 build.gradle 中添加依赖:
然后在 External Libraries 中查看插件源码,实现部分可以参考Android Gradle Plugin解析。
其他的生态特性,本文就不在介绍,有兴趣的可以去了解 Gradle Features。
5、写在最后
本篇介绍了 Gradle 的核心作用以及功能特性。Android 主要是靠 Gradle 以及附加的插件 Android Plugin 共同完成项目的构建工作的。
下一篇,我们将介绍 Gradle 的一些相关知识、命令行工具 (command-line)和 Gradle Wrapper。