详解使用 gradle 构建您的 Android 项目(1)

zidea · · 1746 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

如果要用一个漫威英雄来形容 gradle 这个框架,我会想到绿巨人,因为 gradle 以前给大家印象就是强大但是有点慢。


绿巨人

Gradle 是系统构建工具,他主要用于构建 java 和 Android 项目,再直白一些,就是帮助我们做一些复杂而繁琐的构建的事情,这里我们以构建 android 项目为例,可以看一下流程,平时我们在调试和发布版本时,只要都会运行 android studio的 run,android studio 就自动把项目构建完成,但是想一想,android studio 是如何把代码编译成一个 apk 文件后安装到手机或模拟器上的呢。我们当然可以手动或者使用其他工具来将我们项目生成为 apk 文件。但是google 选择 gradle 继承都开发工具,我们当然就首选 gradle 来构建我们 anroid 项目。

groovy

其实如果想具体了解,可以去官网看一看,学习最好的方法。还是官网。在项目顶层是 setting.gradle 和 build.gradle 的 gradle 文件。

首先我们简单了解一些 gradle 大概是如何来构建我们应用或项目的,gradle 是用 groovy 语言来编写的。在编译过程中, Gradle 会根据 build 相关文件,聚合所有的project和task,执行task 中的 action。因为 build.gradle文件中的task非常多,先执行哪个后执行那个需要一种逻辑来保证。这种逻辑就是依赖逻辑,几乎所有的Task 都需要依赖其他 task 来执行,没有被依赖的task 会首先被执行。所以到最后所有的 Task 会构成一个 有向无环图(DAG Directed Acyclic Graph)的数据结构。Groovy比较讨好来自Java的程序员的一点是:用它写代码可以渐进的从接近Java的风格进化为接近Ruby的风格。被视为脚本/灵活/动态的语言。个人比较喜欢这样的语言,毕竟是 javascript 出身,对这类语言还是有些好感的。这里在唠一唠自己看好和偏好喜欢哪些语言吧,javascript 当然是我的最爱了。最开始就是靠他混饭的,然后就是接触到 java ,也不错最开始写java 还真是体力活,随着工作能拿得起来,有了足够业余时间了,就是开始研究一段 python,看了看 scala ,Kotlin,golang,cpp 还是 rust 等等,最终感觉自己还是喜欢动态类还有就是有镢头的 cpp 呀。(这段可忽略)

语言

我们先看一看 setting.gradle 是由哪些部分组成,include 是项目包含的模块,看帮助文档,可以看出这里是用于指出项目构建中需要包含哪些模块。这里 include 其实应该是一个方法,也可以这样写 include(':app'),没毛病,这个词在新单位新学的口馋,表示没有问题的意思。大家看到只是表象,其实 include 是一个任务的动作,是一个函数,gradle 的脚本是用 groovy 编写的,groovy 语法比较宽松,函数可以写成 functionName(arg) 也可以写成 functionName arg ,还有一个需要说明就是这里 include 是接受一个模块的路径,这里的 : 代表根目录也就是 / 的意思,但这里不用 / ,而需要用 :

图1

好我们在顶层,也就是顶层的 build.gradle

第一个任务就是 allprojects 这里做的事情是全局配置,其实这个方法需要一个参数 Project 也就是传给他一个闭包,这里闭包就是这个项目 Project 本身。如果不了解 groovy 但您了解想 javascript 这样语言,可能闭包应该不难理解,不急随后我会给大家全面讲解 groovy,呵呵是又在挖坑还是又在吹牛呢。这回当然不是了,coding 我们是认真的。

图2

Buildscript 定义了我们构建项目的脚本的

依赖和工具包,这里 repositories 代码仓库位置,也就是我们代码是从哪里下载的。而 dependencies 这是我们脚本以来的工具库位置。

图5

接下来就是今天的重点了,我们开发 android 时打交道最多的 gradle 文件的,位于 app 文件夹下 build.gradle 文件。

图6

apply plugin: 第一行代码应用了Android 程序的gradle插件,作为Android 的应用程序,这一步是必须的,因为plugin中提供了Android 编译、测试、打包等等的所有task。

        如果是 java 项目我们就需要使用 java 插件,这里就写 apply plugin: ‘java’。

android: 这是编译文件中最大的代码块,关于 android 的所有特殊配置都在这里,这就是又我们前面的声明的 plugin 提供的。

defaultConfig 就是程序的默认配置,注意,如果在 AndroidMainfest.xml 里面定义了与这里相同的属性,会以这里的为主。这里需要说明一些 applicationId 的用途,applicationId 作为应用的标识,防止在 android 设备上重复地安装同一个应用,如果我们要一台设备上安装调试版本的应用和发布版本应用就需要使用不同 applicationId。另一个就是作为我们R资源类的包名。在以前我们修改这个ID会导致所有用引用R资源类的地方都要修改。但是现在我们如果修改applicationId只会修改当前程序的ID,而不会去修改源码中资源文件的引用。

buildTypes: 定义了编译类型,针对每个类型我们可以有不同的编译配置,不同的编译配置对应的有不同的编译命令。默认的有debug、release 的类型。我们这里可以创建收费版本和免费版本,然后根据您的选择可以做到多版本发布。

dependencies: 是属于gradle 的依赖配置。他定义了当前项目需要依赖的其他库。

Repositories 就是代码仓库,这个相信大家都知道,我们平时的添加的一些 dependency 就是从这里下载的,Gradle 支持三种类型的仓库:Maven,Ivy和一些静态文件或者文件夹。在编译的执行阶段,gradle 将会从仓库中取出对应需要的依赖文件,当然,gradle 本地也会有自己的缓存,不会每次都去取这些依赖。

gradle 支持多种 Maven 仓库,一般我们就是用共有的jCenter就可以了。

有一些项目,可能是一些公司私有的仓库中的,这时候我们需要手动加入仓库连接:

这里大家可能看到阶段字眼,其实我们的编译也是一个过程,当然需要一定时间,而且编译需要有一定顺序,在时间上有了顺序,也就是说明编译是一个周期,有开始有结束。


请关注我的公众号,获得更多更快信息


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:zidea

查看原文:详解使用 gradle 构建您的 Android 项目(1)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1746 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传