没有合适的资源?快使用搜索试试~ 我知道了~
深入理解Android之Gradle.pdf
需积分: 49 13 下载量 8 浏览量
2017-09-23
14:19:45
上传
评论 1
收藏 1.88MB PDF 举报
温馨提示
试读
60页
深入理解Android 之Gradle Gradle 是当前非常“劲爆”得构建工具。本篇文章就是专为讲解Gradle 而来。介绍Gradle 之前,先说点题外话。 一、题外话 说实话,我在大法工作的时候,就见过Gradle。但是当时我一直不知道这是什么东西。 而且大法工具组的工程师还将其和Android Studio 大法版一起推送,偶一看就更没兴趣了。 为什么那个时候如此不待见Gradle 呢?因为我此前一直是做ROM 开发。在这个层面上,我 们用make,mm 或者mmm 就可以了。而且,编译耗时对我们来说也不是啥痛点,因为用 组内吊炸天的神机服务器完整编译大法的image 也要耗费1 个小时左右。所以,那个时侯 Gradle 完全不是我们的菜。 现在,搞APP 开发居多,编译/打包等问题立即就成痛点了。比如: 一个APP 有多个版本,Release 版、Debug 版、Test 版。甚至针对不同APP Store 都有不同的版本。在以前ROM 的环境下,虽然可以配置Android.mk,但是需要依 赖整个Android 源码,而且还不能完全做到满足条件,很多事情需要手动搞。一个 app 如果涉及到多个开发者,手动操作必然会带来混乱。 library 工程我们需要编译成jar 包,然后发布给其他开发者使用。以前是用 eclipse 的export,做一堆选择。要是能自动编译成jar 包就爽了。 上述问题对绝大部分APP 开发者而言都不陌生,而Gradle 作为一种很方便的的构建工 具,可以非常轻松得解决构建过程中的各种问题。 二、
资源推荐
资源详情
资源评论
深入理解 Android 之 Gradle
Gradle 是当前非常“劲爆”得构建工具。本篇文章就是专为讲解 Gradle 而来。介绍 Gradle
之前,先说点题外话。
一、题外话
说实话,我在大法工作的时候,就见过 Gradle。但是当时我一直不知道这是什么东西。
而且大法工具组的工程师还将其和 Android Studio 大法版一起推送,偶一看就更没兴趣了。
为什么那个时候如此不待见 Gradle 呢?因为我此前一直是做 ROM 开发。在这个层面上,我
们用 make,mm 或者 mmm 就可以了。而且,编译耗时对我们来说也不是啥痛点,因为用
组内吊炸天的神机服务器完整编译大法的 image 也要耗费 1 个小时左右。所以,那个时侯
Gradle 完全不是我们的菜。
现在,搞 APP 开发居多,编译/打包等问题立即就成痛点了。比如:
一个 APP 有多个版本,Release 版、Debug 版、Test 版。甚至针对不同 APP Store
都有不同的版本。在以前 ROM 的环境下,虽然可以配置 Android.mk,但是需要依
赖整个 Android 源码,而且还不能完全做到满足条件,很多事情需要手动搞。一个
app 如果涉及到多个开发者,手动操作必然会带来混乱。
library 工程我们需要编译成 jar 包,然后发布给其他开发者使用。以前是用
eclipse 的 export,做一堆选择。要是能自动编译成 jar 包就爽了。
上述问题对绝大部分 APP 开发者而言都不陌生,而 Gradle 作为一种很方便的的构建工
具,可以非常轻松得解决构建过程中的各种问题。
二、闲言构建
构建,叫 build 也好,叫 make 也行。反正就是根据输入信息然后干一堆事情,最后得
到几个产出物(Artifact)。
最最简单的构建工具就是 make 了。make 就是根据 Makefile 文件中写的规则,执行对
应的命令,然后得到目标产物。
日常生活中,和构建最类似的一个场景就是做菜。输入各种食材,然后按固定的工序,
最后得到一盘菜。当然,做同样一道菜,由于需求不同,做出来的东西也不尽相同。比如,
宫保鸡丁这道菜,回民要求不能放大油、口淡的要求少放盐和各种油、辣不怕的男女汉子
们可以要求多放辣子....总之,做菜包含固定的工序,但是对于不同条件或需求,需要做不
同的处理。
在 Gradle 爆红之前,常用的构建工具是 ANT,然后又进化到 Maven。ANT 和 Maven
这两个工具其实也还算方便,现在还有很多地方在使用。但是二者都有一些缺点,所以让更
懒得人觉得不是那么方便。比如,Maven 编译规则是用 XML 来编写的。XML 虽然通俗易
懂,但是很难在 xml 中描述 if{某条件成立,编译某文件}/else{编译其他文件}这样有不同条
件的任务。
怎么解决?怎么解决好?对程序员而言,自然是编程解决,但是有几个小要求:
这种“编程”不要搞得和程序员理解的编程那样复杂。寥寥几笔,轻轻松松把
要做的事情描述出来就最好不过。所以,Gradle 选择了 Groovy。Groovy 基于 Java
并拓展了 Java。 Java 程序员可以无缝切换到使用 Groovy 开发程序。Groovy 说白
了就是把写 Java 程序变得像写脚本一样简单。写完就可以执行,Groovy 内部会
将其编译成 Java class 然后启动虚拟机来执行。当然,这些底层的渣活不需要你管。
除了可以用很灵活的语言来写构建规则外,Gradle 另外一个特点就是它是一种
DSL,即 Domain Specific Language,领域相关语言。什么是 DSL,说白了它是某
个行业中的行话。还是不明白?徐克导演得《智取威虎山》中就有很典型的 DSL
使用描述,比如:
土匪:蘑菇,你哪路?什么价?(什么人?到哪里去?)
杨子荣:哈!想啥来啥,想吃奶来了妈妈,想娘家的人,孩子他舅舅来了。(找同行)
杨子荣:拜见三爷!
土匪:天王盖地虎!(你好大的胆!敢来气你的祖宗?)
杨子荣:宝塔镇河妖!(要是那样,叫我从山上摔死,掉河里淹死。)
土匪:野鸡闷头钻,哪能上天王山!(你不是正牌的。)
杨子荣:地上有的是米,喂呀,有根底!(老子是正牌的,老牌的。)
Gradle 中也有类似的行话,比如 sourceSets 代表源文件的集合等.....太多了,记不住。以
后我们都会接触到这些行话。那么,对使用者而言,这些行话的好处是什么呢?这就是:
一句行话可以包含很多意思,而且在这个行当里的人一听就懂,不用解释。另外,基
于行话,我们甚至可以建立一个模板,使用者只要往这个模板里填必须要填的内容,Gradle
就可以非常漂亮得完成工作,得到想要的东西。
这就和现在的智能炒菜机器似的,只要选择菜谱,把食材准备好,剩下的事情就不用你操心
了。吃货们对这种做菜方式肯定是以反感为主,太没有特色了。但是程序员对 Gradle 类似
做法却热烈拥抱。
到此,大家应该明白要真正学会 Gradle 恐怕是离不开下面两个基础知识:
Groovy,由于它基于 Java,所以我们仅介绍 Java 之外的东西。了解 Groovy 语
言是掌握 Gradle 的基础。
Gradle 作为一个工具,它的行话和它“为人处事”的原则。
三、Groovy 介绍
Groovy 是一种动态语言。这种语言比较有特点,它和 Java 一样,也运行于 Java 虚拟机
中。恩??对头,简单粗暴点儿看,你可以认为 Groovy 扩展了 Java 语言。比如,Groovy
对自己的定义就是:Groovy 是在 java 平台上的、 具有像 Python, Ruby 和 Smalltalk 语
言特性的灵活动态语言, Groovy 保证了这些特性像 Java 语法一样被 Java 开发者使用。
除了语言和 Java 相通外,Groovy 有时候又像一种脚本语言。前文也提到过,当我执行
Groovy 脚本时,Groovy 会先将其编译成 Java 类字节码,然后通过 Jvm 来执行这个 Java 类。
图 1 展示了 Java、Groovy 和 Jvm 之间的关系。
实际上,由于 Groovy Code 在真正执行的时候已经变成了 Java 字节码,所以 JVM 根
本不知道自己运行的是 Groovy 代码。
图 1 Java、Groovy 和 JVM 的关系
下面我们将介绍 Groovy。由于此文的主要目的是 Gradle,所以我们不会过多讨论 Groovy
中细枝末节的东西,而是把知识点集中在以后和 Gradle 打交道时一些常用的地方上。
3.1 Groovy 开发环境
在学习本节的时候,最好部署一下 Groovy 开发环境。根据 Groovy 官网的介绍
(http://www.groovy-lang.org/download.html#gvm),部署 Groovy 开发环境非常简单,在
Ubuntu 或者 cygwin 之类的地方:
curl -s get.gvmtool.net | bash
source "$HOME/.gvm/bin/gvm-init.sh"
gvm install groovy
执行完最后一步,Groovy 就下载并安装了。图 1 是安装时候的示意图
然后,创建一个 test.groovy 文件,里边只有一行代码:
println "hello groovy"
执行 groovy test.groovy,输出结果如图 2 所示:
亲们,必须要完成上面的操作啊。做完后,有什么感觉和体会?
最大的感觉可能就是 groovy 和 shell 脚本,或者 python 好类似。
另 外 , 除 了 可 以 直 接 使 用 JDK 之外,Groovy 还有一套 GDK , 网 址 是
http://www.groovy-lang.org/api.html。
图 1 Groovy 安装示意图
图 2 执行 groovy 脚本
说实话,看了这么多家 API 文档,还是 Google 的 Android API 文档做得好。其页面中右上
角有一个搜索栏,在里边输入一些关键字,瞬间就能列出候选类,相关文档,方便得不得了
啊.....
3.2 一些前提知识
为了后面讲述方面,这里先介绍一些前提知识。初期接触可能有些别扭,看习惯就好了。
Groovy 注释标记和 Java 一样,支持//或者/**/
Groovy 语句可以不用分号结尾。Groovy 为了尽量减少代码的输入,确实煞费
苦心
Groovy 中支持动态类型,即定义变量的时候可以不指定其类型。Groovy 中,
变量定义可以使用关键字 def。注意,虽然 def 不是必须的,但是为了代码清晰,
建议还是使用 def 关键字
def variable1 = 1 //可以不使用分号结尾
def varable2 = "I am a person"
def int x = 1 //变量定义时,也可以直接指定类型
函数定义时,参数的类型也可以不指定。比如
String testFunction(arg1,arg2){//无需指定参数类型
...
}
除了变量定义可以不指定类型外,Groovy 中函数的返回值也可以是无类型的。
比如:
//无类型的函数定义,必须使用 def 关键字
def nonReturnTypeFunc(){
last_line //最后一行代码的执行结果就是本函数的返回值
}
//如果指定了函数返回类型,则可不必加 def 关键字来定义函数
String getString(){
return "I am a string"
}
剩余59页未读,继续阅读
资源评论
mutoude123
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功