Gradle构建工具的使用

Gradle构建工具的使用

给Android 开发者的 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目录中满足相应要求的文件等都会以二进制的方式存放在该文件中,

https://www.jianshu.com/p/de7c4f239ab6

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容