一、Gradle 下载和安装
Gradle 的官网:http://gradle.org/
文档位置:https://docs.gradle.org/current/release-notes
其中的UserGuide 和DSL Reference 很关键。User Guide 就是介绍Gradle
的一本书,而DSLReference 是Gradle API 的说明。
安装as 之后就安装好了
Linux:/Home/softInstall/android-studio/gradle/gradle-2.8
Windows:D:\ProgramFiles\Android\AndroidStudio\gradle\gradle-2.2.1
也可以单独下载,官网下载地址:
http://gradle.org/gradle-download/ ,选择Completedistribution 和Binary
only distribution 都行。然后解压到指定目录。
二、gradle 配置
Gradle 的配置主要是配置环境变量
1、Windows:
配置GRADLE_HOME–>C:\Program Files\Android\Android
Studio\gradle\gradle-2.2.1
配置GRADLE_USER_HOME–>D:\java\gradle.gradle,默认是在
C:\Users\Administrator.gradle 选择性的修改
配置path–>
%GRADLE_HOME%\bin,%GRADLE_HOME%,%GRADLE_USER_HOME%
2、Linux:
设置~/.bashrc,把 Gradle 加到 PATH 里:
GRADLE_HOME=/data/nishome/tdsw1/pengan.li/softInstall/android-stu
dio/gradle/gradle-2.8
GRADLE_USER_HOME=/data/nishome/tdsw1/pengan.li/.gradle
export PATH=
GRADLEHOME/bin:
PATH
export PATH=
GRADLEUSERHOME/bin:
PATH
执行 source ~/.bashrc,初始化环境。
执行 gradle
–version,如果成功运行就 OK 了。
三、构建概述
构建,叫 build 也好,叫 make 也行。反正就是根据输入信息然后干一堆事
情,最后得到几个产出物。Android 中简单理解就是生成 app 的过程。最简单
的构建工具就是 make 了。make 就是根据 Makefile 文件中写的规则,执行对
应的命令,然后得到目标产物。
日常生活中,和构建最类似的一个场景就是做菜。输入各种食材,然后按固
定的工序,最后得到一盘菜。当然,做同样一道菜,由于需求不同,做出来的东
西也不尽相同。比如,宫保鸡丁这道菜,回民要求不能放大油、口淡的要求少放
盐和各种油、辣不怕的男女汉子们可以要求多放辣子。总之,做菜包含固定的工
序,但是对于不同条件或需求,需要做不同的处理。
在 Gradle 之前,常用的构建工具是 ANT,然后又进化到 Maven。ANT 和
Maven 这两个工具其实也还算方便,现在还有很多地方在使用。但是二者都有
一些缺点,这点后面再说。
四、gradle 构建
Gradle 百度百科:Gradle 是一个基于 Apache Ant 和 Apache Maven 概
念的项目自动化建构工具。它使用一种基于 Groovy 的特定领域语言(DSL)来声
明项目设置,抛弃了基于 XML 的各种繁琐配置。面向 Java 应用为主。当前其支持的语言限于 Java、Groovy 和 Scala,计划未来将支持更多的语言。
通俗的说,gradle 是打包用的。为什么要打包发布,打包发布有几种常见
方法,为什么这些常见方法中要选 gradle?
以在 eclipse 里面写 java 程序为例
(1)为什么需要打包:
最初写完了,直接右键 run 就可以了。但是程序写完了毕竟是要发布到服
务器上或者给别人用的,你第一不可能让所有要运行的人都装个 eclipse,第二
不可能把源代码公布给所有人。所以你需要把你的代码发布成二进制形式,让其
它环境方便运行,这就是打包。
(2)为什么用 ant
打包的时候要做很多事,比如说配置文件中的用户名和密码,你本地开发和
程序实际运行时的内容肯定不一致,所以需要有两个文件,开发的时候用一个,
实际运行的时候用一个。这样每次打包的时候都要重复的做这些事,ant 可以让
你用 xml 的形式把这些事情写成脚本,然后自动运行。
(3)为什么用 maven
你的项目要用很多 jar 包,比如你写日志要用 log4j,连数据库要用个
connector。JavaWeb 要使用 Spring,下载下来的 spring 包打开一看,密密
麻麻的好几十个 jar,不知道用哪个不用哪个。而且,即便是你一狠心把这些 jar
包都放进来,很大可能性还是不能运行,因为还要依赖其它的 jar 包。哪天想升
级个 spring 小版本,所有 jar 包都要重来一遍,你也不记得哪些是由于 spring
引进来的 jar 包了。
所以有了 maven,你只要配置一下说我要用 spring 3,所有 jar 包都给你
下载好了,你直接运行就行了。什么时候想升级版本,直接把 3 改成 4,新的 jar
包也给你下载好了。相比于 ant,它多做的事是帮你下载 jar 包。但是 maven
的打包逻辑太死板,定制起来太麻烦,不如 ant 好用。
(4)为什么用 gradle
然后用了 maven,jar 包是方便了,但我打包的时候还是有好多事要做啊,
你会发现 maven 实在是不知道怎么做这些事,Maven 引入的 XML 配置文件可读性和可扩展性比较差,XML 虽然通俗易懂,但是很难在 xml 中描述 if{某条件
成立,编译某文件}/else{编译其他文件}这样有不同条件的任务。于是开始怀念
ant。gradle 就是又能干 maven 的活,又能干 ant 的活,用 groove 语言写脚
本,表达能力还更强。gradle 就是又能自动下 jar 包,又能自己写脚本,并且脚
本写起来还比 ant 好用的这么个东西。一句话概括就是:依赖管理和任务执行。
Ant 与 Maven 对于 Gradle,前者编写容易,但功能有限,需要人工操作的
过程也多;后者依托于庞大的依赖仓库,因此有着强大的外部依赖管理,但添加
本地依赖并不方便,且项目不能灵活修改。而 Gradle 能很好地结合 Ant 与
Maven 各自的优点,可以随意的编写任务并组合成项目,直接利用 Maven 仓
库,并且能很好的支持依赖管理。
通俗一点类比成吃饭的话,大致就是: Ant 是自己买菜洗菜烧水做饭,
Maven 是去饭店点餐,Gradle 是 3D 打印食物。总而言之,Gradle 并没有引
入太新鲜的东西,它是一个结合 Ant 和 Maven 理念的优秀实现。
软件开发也是一种工程作业,绝不仅仅是写代码,还涉及到工程的各种管理
(依赖,打包,部署,发布,各种渠道的差异管理…..),开发者每天都在 build,clean,签
名,打包,发布,有没有想过这种过程,也可以像代码一样被描述出来, 也可以被复
用。整个过程可以分成以下几个步骤:
1) 编译源代码
2) 运行单元测试和集成测试
3) 执行静态代码分析、生成分析报告
4) 创建发布版本
5) 部署到目标环境
6) 执行功能测试
如果你手工去操作这些过程会很繁琐,效率低下,Gradle 提供自动化的构建机
制,上面的每个步骤都可以表示成 Gradle 里面的一个任务(Task),任务之间可
以相互依赖。见 androidstudio 中的 tasks。Gradle 脚本是基于 Groovy 领域
特定语言,也就是说构建文件也是代码。Gradle 可以让你像写代码一样写出容
易维护、可复用、可读性好、易于理解的构建代码。
1、差异管理:多渠道打包做 Android 开发的,你可知道国内有 n 个 Android 市场,n 个手机品牌,n 个手机尺寸,一般公司都会针对不同的市场单独发包用来统计不同渠道的下载量等情况,可能需要针对不同(品牌,尺寸等各种硬件信息)的手机做一些特殊的处理。
上面的多渠道问题,不同的渠道一般会对应不同的渠道号,你当然可以通过修改一
次打一个包这种纯手工的方式来生成你的多渠道包,但据听说国内某团购网站的
Android App 有 100 多个渠道.这里出现了什么?重复,反复的去打包而且这些包
之前的差异很小(只是渠道号不同),和写代码一样我们应该复用,通过Gradle可以
实现一个命令打出所有的渠道包,一个命令打出指定的渠道包.再复杂一点,你可
能需要不同的渠道对应不同的签名文件,不同的 icon,不同的服务器地址…这些都
可以通过 Gradle 来方便的实现.
2、依赖管理
依赖管理:简单地说就是你只用写一行代码就可以自动帮你把 jar/aar 包下
载下来并能被当前工程所使用。
做软件开发你可能需要依赖各种不同的 jar,library.你当然可以通过
将.jar/library 工程下载到本地再 copy 到你的工程中,但不知你是否听说过国外
有个叫中央仓库的东西,在这个仓库里你可以找到所有你能想到以及你从来没听
说过的 jar,aar…这里可以找到所有你需要的依赖,如下:
dependencies
//表示编译期依赖 appcompat-v7 这个库
compile(‘com.android.support:appcompat-v7:23.0.1’)
}
剩下的依赖的寻找,下载,添加到 classpath 等你都不需要去关心,通过这种方式来
维护依赖的好处有以下几点:
a. 依赖不会进入到你的版本控制仓库中(默认会缓存到~/.gradle/下)
b. 方便卸载装载依赖(只是一条坐标依赖,不需要删除即可)
c. 方便的版本管理,如上图中的 23.0.1 是 appcompat-v7 的版本号。
d. gradle 还可以支持动态版本,只需要把最后一位数字改成+号。
e. 不同工程的相同依赖不会存在重复副本(只在~/.gradle 下存在一份)

488

被折叠的 条评论
为什么被折叠?



