目录
一、项目自动化
1、什么是项目自动化
从安卓开发的角度来抛出一个问题,如果不用gradle如何打包出apk文件?
大家可以产考下面这篇文章:
不用gradle如何编译出android apk?_匆匆往站-优快云博客
这篇文章将一步一步的流程集合成了一个shell脚本,也算是半自动化了。如果没有这个脚本,里面的每一个步骤,我们是不是都需要手动执行?有一个地方出错,我们就无法进行下去,需要解决后才能执行下一步的流程。还有一些令人头疼的问题,在gradle中依赖一个三方库可以用一行代码来解决如 implementation "xxxxxx",那么不用gradle,我又如何将一个三方库下载到本地,然后依赖上呢?想想都烦琐的令人头疼,还极其容易出错。
用gradle,很容写一个规范的构建脚本,有了这个脚本,在项目开发中无论是谁,都能做到一键编译并打包apk。
所以,自动化构建的好处,可以简单概括成一句话,就是能 快速、简单、正确 的构建成一个可用的应用程序。
2、项目自动化类型
2.1 、按需构建
按照需要,什么时候想构建程序,按下构建的按钮进行一次构建就好了,完全由操作者自己的意识来决定,只是单纯的想构建一下应用程序。
2.2 、触发构建
通常是在向版本控制系统提交代码时触发,触发内容包括一些自动化测试的工作脚本,并将测试结果进行反馈,来检验程序的健康程度,帮助开发人员快速发现一些问题,并进行改正。
2.3 、定时构建
在固定的时间点,比如每天上午5点,触发一些预定义的构建工作,又叫做定时任务,这种任务通常放在一个专用的服务器上来工作。 可以生成一些自动化测试报告,以及程序文件,对android来说就是apk文件,这样测试每天早上都可以获取到前一天最新代码构建的apk文件来进行测试,而省去了开发人员帮助他们打包,再发送给他们这一环节,无论对测试和开发人员来说,都省了一些时间和精力。
二、自动化构建工具概述
1、为什么需要自动化构建工具
有人会说,用shell脚本也可以实现自动化构建,为什么还需要自动化构建工具?答案是,shell脚本并不能完全做到稳定、可靠、以及不需要手动干预这些点,如将一个shell脚本从unix平台迁移到window平台,也是需要费一些时间和精力的。
2、什么是自动化工具
可编程的,可以执行有序的任务,实现构建自动化的工具
如:打包多个不同渠道的apk文件,然后将所有生成的apk文件拷贝到一个预期的目标文件夹,以供发版使用,就是一个特殊的自动化任务需求。
3、构建工具中的每个元素和它们的职责
3.1、构建文件
构建文件包含了所需要的配置信息和、定义外部依赖(如三方库)、还有以任务形式(gradle中指一个Task)实现某个特殊的指令(如拷贝文件)和任务之间的依赖关系(gradle中一个Task A被TaskB所依赖,TaskB在TaskA执行完之后,才会执行),通常情况下构建文件会使用脚本语言(如groovy)来编写构建逻辑,又叫构建脚本。
3.2、构建的输入和输出
Task可以接受一个输入然后产生一个输出(如:如编译jiava源码的任务输入是java源码,输出是class文件。)。Task也可以不接收输入,不产生输出。
3.3、构建引擎
对构建脚本的内容进行解释,解释成构建引擎能理解的语言,从而按照正确的方式去执行构建脚本中的一系列任务。
3.4、依赖管理器
android 开发在build文件中声明的依赖,像 implementation “xxxx”,一般指对外部仓库系统中可重用的代码库的依赖,而依赖管理器,就是负责将仓促中的文件下载到本地,并建立正确的依赖路径,供主模块调用。
三、基于java的构建工具 Ant 和 Mave.
1、Ant
1.1、Ant的应用范围
由java编写的构建工具,主要在java项目中,为常用任务提供自动化,如编译源代码、运行单元测试、打包JAR文件和生成Javac文档。
1.2、Ant的使用方式
build文件通过XML文件来表示
1.3、Ant的缺点
* XML作为脚本定义语言,比其它语言更臃肿啰嗦
* 复杂的构建逻辑导致又长又难维护的脚本,当使用XML来定义类似 if/else类似得语句时,实现方式如下文:
ant 中 if else_yieryi_-优快云博客_ant if,非常长。
* 不提供依赖管理器,需要手动做依赖管理,或者和第三方工具配合使用
* 没有提供构建项目的指导,每个人会根据自己开发的模块,修改build脚本,构建脚本不通用(如每个模块的开发 人员都可能会有一个不同于其他人的源码目录,由于目录不同,所有脚本里会出现大量的类似的代码 ),可读性差。
* 没有提供API获取构建过程中的内存信息,如:获取有多少个Task被执行,是获取不到的。
2、Maven
2.1、Maven的使用方式
仍然是用XML的方式来编写脚本
2.2、Mave相对于Ant的优点
* Mave在配置前会有些默认的约定,如 编译源码从哪个文件夹去寻找文件。如果项目遵守约定的相关默认值,只需要几行XML代码就可以构建一个项目
* 基于构建生命周期的思想,每个项目都按照固定的生命周期去执行构建打包和发布应用程序。
* 增加了直接在XML中对外部库进行依赖的能力。
* Maven的缺点
* Maven推荐一个默认的目录结构和生命周期,限制性太大,并不适合所有项目
* 基于XML,扩展功能过于繁琐。
3、一个好用的构建工具应该具有的特征
* 具有表达性、声明式、可维护的构建语言。简单来说就是能用向写普通代码一样管理整个构建流程。
* 标准化的布局和生命周期,但是具有灵活性和默认值的完全可配置性(灵活性:像android的gradle脚本支持不同Flavor的构建。)
* 拥有灵活易用的方式去实现定制的逻辑。
* 支持构建由多个项目组成的项目结构
* 支持依赖管理
* 能很好的迁移现有的基础构建设施,如基于Ant或者Mave的构建系统。
* 可扩展性好,构建效率高。
四、Gradle
gradle就是我们理想的新一代构建工具
1、为什选择gradle
提供了表达性的DSL语言,约定优先于配置,和强大的依赖管理,引入Groovy语言来编写构建逻辑。满足上节中我们对理想构建工具的要求的所有内容。
参考书籍:实践gradle