Gradle构建工具的使用
Gradle构建工具的使用
https://www.oschina.net/translate/beginners-guide-to-gradle-for-android-developers
https://www.jianshu.com/p/c456a1df1e11
Gradle是一个构建工具,构建工具用于实现项目自动化,是一种可编程的工具,你可以用代码来控制构建流程最终生成可交付的软件。构建工具可以帮助你创建一个重复的、可靠的、无需手动介入的、不依赖于特定操作系统和IDE的构建。
Gradle结合Ant和Maven等构建工具的最佳特性。它有着约定优于配置的方法、强大的依赖管理,它的构建脚本使用Groovy或Kotlin DSL编写,是Android的官方构建工具。
Gradle可以使用Groovy DSL来实现构建脚本,Groovy 是基于Jvm一种动态语言,它的语法和Java非常相似并兼容Java,因此你无需担心学习Groovy的成本。Groovy在Java的基础上增加了很多动态类型和灵活的特性,比起XML,Gradle更具有表达性和可读性。
Gradle Wrapper是对Gradle 的包装,它的作用是简化Gradle本身的下载、安装和构建,比如它会在我们没有安装Gradle的情况下,去下载指定版本的Gradle并进行构建。Gradle的版本很多,所以有可能出现版本兼容的问题,这时就需要Gradle Wrapper去统一Gradle的版本,避免开发团队因为Gradle版本不一致而产生问题。
Gradle显然无法满足所有企业级构建的所有要求,但是可以通过Hook Gradle的生命周期,来监控和配置构建脚本。
gradle -q tasks命令来获取所有的任务信息
注意:
默认情况下,只会显示那些被分组的任务的名称和描述。比如Build tasks(Build 任务组)中有我们定义的hello任务,Build Setup tasks中有init和wrapper,Help tasks有buildEnvironment 和components等等。
Groovy中的闭包是一个开放的、匿名的、可以接受参数和返回值的代码块。
当使用Gradle Wrapper启动Gradle时,如果指定版本的Gradle没有被下载关联,会先从Gradle官方仓库下载该版本Gradle到用户本地,进行解包并执行批处理文件。后续的构建运行都会重用这个解包的运行时安装程序。
Gradle已经内置了Wrapper Task,因此构建Gradle Wrapper会生成Gradle Wrapper的属性文件,这个属性文件可以通过自定义Wrapper Task来设置。
Gradle本身和初始的机器人一样,只是提供了基本的核心功能,其他的特性比如编译Java源码的能力,编译Android工程的能力等等就需要通过插件来实现了。本篇文章主要说的是Gradle插件,而不是Android Gradle插件。
要想应用插件,主要有两个步骤,一是解析插件,二是把插件应用到项目中,应用插件通过Project.apply() 方法来完成。在Gradle中一般有两种类型的插件,分别叫做脚本插件和对象插件。脚本插件是额外的构建脚本,它会进一步配置构建,可以把它理解为一个普通的build.gradle。对象插件又叫做二进制插件,是实现了Plugin接口的类,下面分别介绍如何使用它们。
3.Gradle插件的作用和好处
Gradle插件可以做什么呢?主要有以下的几点
[if !supportLists]· [endif]为项目配置依赖。
[if !supportLists]· [endif]为项目配置约定,比如约定源代码的存放位置。
[if !supportLists]· [endif]为项目添加任务,完成测试、编译、打包等任务。
[if !supportLists]· [endif]为项目中的核心对象和其他插件的对象添加拓展类型。
使用Gradle插件主要有以下的好处:
[if !supportLists]· [endif]重用和减少维护在多个项目类似的逻辑的开销。
[if !supportLists]· [endif]更高程度的模块化。
[if !supportLists]· [endif]封装必要的逻辑,并允许构建脚本尽可能是声明性地。
定义项目的GroupId和ArtifactId:
Artifact:手工艺品,即在某个组织下创建的一个软件产品
注意:脚本和插件的执行先后顺序
插件需要在脚本配置加载完后再执行的?
Android gradle插件的构建变体配置
https://developer.android.com/studio/build/build-variants
https://developer.android.com/studio/build/index.html
https://developer.android.com/studio/build/build-variants.html
源集
Android Studio 按逻辑关系将每个模块的源代码和资源分组为源集。模块的main/ 源集包括其所有构建变体使用的代码和资源。 其他源集目录为可选项,在您配置新的构建变体时,Android Studio 不会自动为您创建这些目录。 不过,创建类似于 main/ 的源集有助于让 Gradle 仅在构建特定应用版本时才应使用的文件和资源井然有序:
src/main/
此源集包括所有构建变体共用的代码和资源。
src/buildType/
创建此源集可加入特定构建类型专用的代码和资源。
src/productFlavor/
创建此源集可加入特定产品风格专用的代码和资源。
注:如果配置构建以组合多个产品风格,则可为风格维度间产品风格的各个组合创建源集目录:src/productFlavor1ProductFlavor2/
src/productFlavorBuildType/
创建此源集可加入特定构建变体专用的代码和资源。
例如,要生成应用的“完整调试”版本,构建系统需要合并来自以下源集的代码、设置和资源:
[if !supportLists]· [endif]src/fullDebug/(构建变体源集)
[if !supportLists]· [endif]src/debug/(构建类型源集)
[if !supportLists]· [endif]src/full/(产品风格源集)
[if !supportLists]· [endif]src/main/(主源集)
注:当您在Android Studio 中使用File > New 菜单选项新建文件或目录时,可以针对特定源集进行创建。 可供您选择的源集取决于您的构建配置,如果所需目录尚不存在,Android Studio 会自动创建。
如果不同源集包含同一文件的不同版本,Gradle 将按以下优先顺序决定使用哪一个文件(左侧源集替换右侧源集的文件和设置):
构建变体> 构建类型 > 产品风格 > 主源集 > 库依赖项
这样一来,Gradle 便可使用专用于您试图构建的构建变体的文件,同时对与其他应用版本共用的 Activity、应用逻辑和资源加以重复利用。 在合并多个清单时,Gradle 使用同一优先顺序,这样每个构建变体都能在最终清单中定义不同的组件或权限。 如需了解有关创建自定义源集的更多信息,请转至创建用于构建变体的源集。
构建类型buildType
构建变体是包含flavor和buildType的组合
https://developer.android.google.cn/studio/build/dependencies.html
添加构建依赖项
https://developer.android.google.cn/studio/build/dependencies.html
missingDimensionStrategy:库依赖项包含应用不包含的风格维度。
在 defaultConfig 代码块中使用 missingDimensionStrategy 指定插件应从每个缺失维度中选择的默认风格,如下面的示例所示。 您也可以替换在 productFlavors 代码块中的选择,让每种风格都可以为缺失维度指定一个不同的匹配策略。
子模块
Resource.arsc文件
res目录中的values目录下的文件和xml目录中满足相应要求的文件等都会以二进制的方式存放在该文件中,