android gradle权威指南pdf_Gradle这么差还来面腾讯?

36f43bf4d345c1d9d5171e09f75434b2.gif

码个蛋(codeegg)第 638 次推文

作者:厘米姑娘

原文:https://www.jianshu.com/p/1274c1f1b6a4

前言

在使用Android Studio过程中没少被Gradle坑过,虽然网上有很多简单粗暴的解决方案,但极少会说清楚缘由,所以一直想看一本叫《Android Gradle权威指南》。

不过由于书中实践内容很多,更像一本工具书,而且Gradle现已发行了好几版,因此本篇仅仅是陈列出一些大的要点,尤其是那些熟悉又陌生的名词,如果想要具体了解细节和操作流程,一定要跟着书探索哟~

  • Gradle入门

  • Groovy基础

  • Gradle构建脚本基础

  • Gradle插件

  • Java Gradle插件

  • Android Gradle插件

一. Gradle入门

1.本书环境

JDK:OpenJDK 1.8.0

Gradle:Gradle 2.14.1 All 版

IDE:Android Studio 2.2.3

Android Plugin:Android Gradle 2.2.3

Android:API 23

2.Eclipse和Android Studio

a.开发配置区别:

  • Eclipse+ADT+Ant

  • Android Studio+Gradle:Gradle比Ant更灵活,有效提高开发效率

b.Eclipse迁移到AndroidStudio两种方式:

  • 使用AndroidStudio直接导入Eclipse工程

特点:使用AS默认推荐目录结构

  • 使用Eclipse导出Android Gradle配置文件,并转换成Gradle工程,再使用Android Studio把它作为Gradle工程导入

特点:保留原项目结构

3.Gradle的ZIP解压后目录

  • docs:API、 DSL、指南等文档

  • init.d:gradle初始化脚本目录

  • lib:相关库

  • media:一些icon资源

  • samples:示例

  • src:源文件

  • getting-started.html:入门链接

  • LICENSE

  • NOTICE

e48043bcb498aee81a413dd3f738bcd1.png

4.引例:Gradle版Hello World

//build.gradle:
task hello{//定义一个任务Task名为hello
doLast{//添加一个动作Action,表示在Task执行完毕后回调doLast闭包中的代码
println'Hello World'//输出字符串,单双号均可
}
}
//终端:
gradle hello//执行build.gradle中名为Hello的任务
//输出:
Hello World

5.Gradle Wrapper

a.含义:对Gradle一层包装,便于使用统一Gradle构建

b.目录结构:

|--gradle
| |--wrapper
| |--gradle-wrapper.jar
| |--gradle-wrapper.properties
|--gradlew
|--gradlew.bat
4cd6ab78c652f5a86b61e0ec922f6d3e.png
  • gradle-wrapper.jar:具体业务逻辑实现的jar包

  • gradle-wrapper.properties:配置文件,包含篇配置信息如下图:

56c53e5b2afc45822937dab879187869.png
  • gradlew:Linux下可执行脚本

  • gradlew.bat:Windows下可执行脚本

c.常用命令:

  • 生成:gradle wrapper,由Wrapper Task生成

  • 配置参数:

-gradle wrapper --gradle-version XXX用于指定使用的Gradle版本

-gradle wrapper --distribution-url XXX用于指定下载Gradle发行版的url地址

  • 自定义:task wrapper(type:Wrapper){ //配置信息 }

6.Gradle日志

a.日志级别:

94228344b3e7145852697f4f3918dc59.png

b.日志输出代码:

  • 使用print方法,属于quiet级别日志:println 'XX'X

  • 使用内置logger:

a4a8bda07798bd757a3283daa3acd623.png

c.日志输出控制:

74b9a7a3c87cdd072012da9d1c9c6407.png

例如,输出QUIET级别及其之上的日志信息:gradle -q tasks

7.Gradle命令行

  • 查看所有可执行tasks:./gradlew tasks

  • 强制刷新依赖:./gradlew --refresh-dependencies assemble

  • 多任务调用:./gradlew clean jar

  • 查看帮助:./gradlew -?或./gradlew -h或./gradlew -help

二.Groovy基础

一句话表明Groovy的地位:Groovy于Gradle,好比Java于Android

1.特性:

Groovy是个灵活的动态脚本语言,语法和Java很相似,又兼容Java,且在此基础上增加了很多动态类型和灵活的特性,如支持闭包和DSL

2.语法

  • 分号不必需

  • 字符串:单引号和双引号均可定义一个字符串常量,区别在于单引号不能对字符串表达式做运算,而双引号可以

task printStringVar << {
def name = "张三”
println '单引号的变量计算:${name}'
println "双引号的变量计算:${name}"
}
运行./gradlew printStringVar输出结果:
单引号的变量计算:${name}
双引号的变量计算:张三
  • 集合:以List和Map为例,介绍如何定义集合和访问集合元素

//List
task printList<def numList = [1,2,3,4,5,6];//定义一个List

println numList[1]//输出第二个元素
println numList[-1]//输出最后一个元素
println numList[1..3]//输出第二个到第四个元素
numList.each{
println it//输出每个元素
}
}
//Map
task printlnMap<def map1 =['width':1024,'height':768]//定义一个Map

println mapl['width']//输出width的值
println mapl.height//输出height的值
map1.each{
println "Key:${it.key},Value:${it.value}"//输出所有键值对
}
}
  • 方法:方法调用传参的括号可省略;return不必需,无return时会将最后一行代码作为其返回值;允许将代码块(闭包)作为参数传递

//以集合的each方法为例,接受的参数就是一个闭包
numList.each({println it})
//省略传参的括号,并调整格式,有以下常见形式
numList.each{
println it
}
  • 不是一定要定义成员变量才能作为类属性被访问,用get/set方法也能当作类属性

task helloJavaBean<Person p = new Person
p.name = "张三"
println "名字是: ${p.name}"//输出类属性name,为张三
println "年龄是: ${p.age}"//输出类属性age,为12
}
class Person{
private String name
public int getAge{//省略return
12
}
}
  • 闭包:当闭包有一个参数时,默认为it,多个参数时需要一一罗列

//单个参数
task helloClosure<customEach{
println it
}
}
def customEach(closure){
for(int i in 1..10){
closure(i)
}
}
//多个参数
task helloClosure<eachMap{k,v->
println "${k} is ${v}"
}
}
def eachMap(closure){
def map1 = ["name":"张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值