转载请事先沟通,未经允许,谢绝转载。

1. 新工具介绍(Introduction)

能够复用代码和资源
能够构建几种不同版本参数的应用
能够配置、扩展、自定义构建过程
1.1 为什么选择Gradle(Why Gradle?)

Gradle是一款具有优势的构建工具,通过插件可以自定义构建过程。主要优势如下:

基于Groovy的领域特定语言(DSL),用于描述和操作构建过程
支持maven/lvy的依赖管理
非常灵活,并不强迫用户一定要使用最佳的构建方式
插件可以暴露自身的语言和接口api给构建文件使用
支持IDE集成
2.2 需求(Requirements)

Gradle 2.2(Gradle版本是2.2及以上,因为文档中有些新特性)
SDK with Build Tools 19.0.0.
2. 工程基本配置(Basic Project Setup)

Gradle工程默认的配置文件名称是build.gradle,在主工程的根目录下。

2.1 配置文件示例(Simple build files)

下面是一个Android工程的最简单配置文件的内容。

buildscript {
repositories {
jcenter()
}

dependencies {
classpath 'www.yigouyule2.cn/ com.android.tools.build:gradle:1.3.1'
}
}

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.1.0"
配置内容主要分为三部分。

buildscript{},这个部分主要配置在构建过程中的依赖。上面示例中,声明使用jcenter依赖库,声明了一个maven库的依赖com.android.tools.build:gradle:1.3.1,是指引入gradle集成工具,版本是1.3.1。(关于Android Gradle Plugin版本和Gradle版本关系,点这里)
apply plugin,引用插件,com.android.application这个插件用于构建Android工程
android {},这部分是配置构建Android工程的参数。compileSdkVersion和buildToolsVersion是必须的
注意:主工程中只能引用com.android.application插件,如果引用Java插件会报错,参考这里,第一个插件说明这是个Android工程,第二个插件说明这是个Java工程,所以只能引用一个。

注意:用户可以在local.properties文件中使用sdk.dir属性配置本地的Android sdk位置,或者设置一个名为Android_HOME的环境变量,这两种方法没有什么区别。

示例local.properties:

sdk.dir=/path/to/Android/Sdk
1
1
2.2 工程结构(Project Structure)

Android工程文件有默认的目录结构。Gradle遵循约定由于配置规则,提供合理的默认值。工程以两个目录为主,一个是工程代码目录,一个是测试代码目录。

src/main/
src/androidTest/
在每个目录中都有一些子目录,Java工程和Android工程共有的子目录如下:

java/
resources http://xucaizxyl.com//
Android工程中有一些独有的目录:

AndroidManifest.xml
res
assets
aidl
rs
jni
jniLibs
所有的java文件都在src/main/java目录下,主要的配置文件目录是src/main/AndroidManifest.xml。

src/main/AndroidManifest.xml是自动创建的,不需要手动创建

2.2.1 配置目录结构(Configuring the Structure)

默认的目录结构并不能完全适配所有情况,用户可以配置目录结构。点击这里查看Java工程师怎么配置目录结构的。

在Android工程中使用同样的格式,但是因为Android工程中有独有的一些目录,所以配置信息需要写在android {}这部分。下面示例中,工程代码使用原来的目录,修改测试代码的目录。

android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}

androidTest.setRoot('tests')
}
注意:因为旧的目录中包含所有的文件(java、AIDL、res等等),所以需要重设所有的目录

注意:setRoot()重设目录位置,沿用之前的目录结构,这个是Android工程特有的

2.3 构建任务(Build Tasks www.22yigouyule.cn/)

2.3.1 通用任务(General Tasks)

使用插件(包含Java和Android插件)去构建工程会自动创建很多任务,通用的任务如下:

assemble,打包工程所产出的文件
check,运营工程中所有的check任务
build, 执行assemble任务和check任务
clean,清除工程的产出的文件
assemble、check、build这三个任务实际上并不做任何事,他们只是一个壳任务,实告诉Gradle去执行那些的任务。

不管什么工程,依赖了什么插件,都可以反复去调用同一个任务。例如引用一个findBugs插件,会创建一个新的任务,让check任务依赖这个新任务,这样每次调用check任务时候,新建的任务也会执行。

使用gradle tasks指令获取工程中所有的可执行任务
使用gradle tasks --all执行获取工程中所有可执行任务简介以及依赖关系
如果工程中未做任何修改,执行build任务,每个任务描述后面都会加上UP-TO-DATE,这意味着这个任务不需要真正地执行,因为工程没有改动。这样每个任务都可以依赖其他任务,而且不需要其他任务做构建工作。

2.3.2 Java工程任务(Java project www.wendinyule.cn tasks)

引用Java插件时候,说明这个工程是个纯Java工程,会额外添加两个壳任务jar和tests。

assemble
jar 打包工程产出文件
check
tests 执行所有测试
jar任务会直接或者间接的依赖任务classes,这个任务会编译java源代码;tests任务会依赖任务testClasses,但是很少会直接调用这个任务,因为tests任务依赖它,直接调用tests任务即可。

大体上,用户可能只会调用assemble和check任务,很少调用其他任务。可以点击这里查看Java工程所有的任务和任务描述。

2.3.3 Android工程任务(Android tasks www.yigouyule2.cc)

引用com.android.application插件,说明这个工程是Android工程,在通用任务基础上会额外添加两个壳任务。

connectedCheck,查看是否有设备连接
deviceCheck, 查看是否连接上设备
注意,build任务是不依赖connectedCheck和deviceCheck任务的。

一个Android工程至少有两个构建包,debug apk和release apk。每一个构建包都有自己的壳任务。

assemble
assembleDebug
assembleRelease
这两个任务会依赖其他一些任务,要构建出一个安装包,需要执行好多步骤。assemble任务依赖这两个任务,所以执行assemble任务时候,会产出debug和release两个apk。

注意:Gradle支持指令简写模式,例如gradle aR和gradle assembleRelease意义是相同的,只需要保证没有其他任务能简写成aR。

Android工程中check类任务有各自的依赖。

check
lint
connectedCheck
connectedAndroidTest
deviceCheck
它依赖于那些扩展了tests通用任务的任务
最后,Android工程中,也会有对程序安装和卸载的任务。

installDebug
installRelease
uninstallAll
uninstallDebug
uninstallRelease
uninstallDebugAndroidTest
2.4 自定义基本构建(Basic Build Customization)

Android的插件提供了领域特定语言(DSL)来帮助用户直接地自定义构建过程。

2.4.1 清单内容(Manifest entries 027yeshenghuowang.com/)

通过DSL用户可以设置一些构建参数,可设置内容如下:

minSdkVersion
targetSdkVersion
versionCode
versionName
applicationId (最终有效的包名,点击这里查看细节)
testApplicationId (用于测试app)
testInstrumentationRunner
示例如下:

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
versionCode 12
versionName "2.0"
minSdkVersion 16
点击这里查看可以配置的清单参数信息。

可以在.gradle文件中动态配置这些清单信息,例如,动态配置versionName参数,示例如下:

def computeVersionName(www.xyseo.net) {
...
}

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
versionCode 12
versionName computeVersionName()
minSdkVersion 16
targetSdkVersion 23
注意:自定义时尽量不要使用gettter的方法名,防止冲突,例如,defaultConfig.getVersionName()会替换掉自定义的getVersionName()方法,也就是说每一个参数都有默认的getter方法

2.4.2 构建类型(Build Types)

Android工程中默认的会有debug和release两种构建方式,主要区别在于调试程序的能力以及apk签名细节。debug的版本为了防止在构建过程中弹出提示,系统会根据明文的用户名/密码自动创建一个数字证书用于签名,使用debug证书签名的apk是无法上架销售的。release版本在构建过程中不进行签名,将签名放在之后的环节。

在buildTypes中配置构建类型信息,默认会创建两种构建方式,debug和release,在Android工程中允许自定义这两种构建方式的具体细节信息。示例如下:

Gradle用户使用指南的更多相关文章

  1. Gradle用户指南(章9:Groovy快速入门)

    Gradle用户指南(章9:Groovy快速入门) 你可以使用groovy插件来构建groovy项目.这个插件继承了java插件的功能,且扩展了groovy编译.你的项目可以包含groovy代码.ja ...

  2. 《gradle 用户指南中文版》目录

    gradle 用户指南 版权所有©2007-2017 Hans Dockter,Adam Murdoch只要您不对这些副本收取任何费用,并且进一步规定,每个副本都包含本版权声明,无论是以印刷版还是电子 ...

  3. gradle用户目录本地库移动设置

    gradle被越来越多的程序开发人员使用来构件项目代码,使用gradle依赖的第三方jar包有时候非常占空间,默认这样的用户本地库目录(缓存目录)在系统盘上,我们可以修改用户目录到其它盘上 工具/原料 ...

  4. "WannaCry"勒索病毒用户处置指南

    "WannaCry"勒索病毒用户处置指南   原文: http://mp.weixin.qq.com/s/ExsribKum9-AN1ToT10Zog    卡巴斯基,下载官网:h ...

  5. 云资源中的低成本战斗机——竞价实例,AWS、阿里云等六家云厂商完全用户使用指南

    云端资源价格 预留实例:长期持有,批发路线,价格最便宜. 按需实例:即买即用,零售路线,价格最贵. 这两种资源,基于不同区域/价格的六家云厂商价格对比,连同原始数据文档我们已经打包成了一份电子文档,有 ...

  6. Gradle用户指南(1)-Gradle安装

    前置条件 Gradle 需要 Java JDK 或者 JRE,版本是 6 及以上.Gradle 将会装载自己的 Groovy 库,因此,Groovy 不需要被安装.任何存在的 Groovy 安装都会被 ...

  7. Gradle用户指南

    下载安装gradle 2.1 下载地址:http://www.gradle.org/learn 安装先决条件:gradle安装需要1.6或者更高版本的jdk(jre)(可以使用java –versio ...

  8. 《gradle 用户指南中文版》 第一部分、关于Gradle

    第一部分.关于Gradle 目录1.介绍1.1 关于本用户指南2.概述2.1 特性2.2 为什么选择Groovy? 上一页  |  目录  |  下一页

  9. 《gradle 用户指南中文版》 第1章、简介

    第1章.简介 目录 1.1 关于本用户指南 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具. 这里我们将介绍Gradle,我们认为gradle让java项 ...

随机推荐

  1. linux-常用指令3

    系统管理命令 stat              显示指定文件的详细信息,比ls更详细 who               显示在线登陆用户 whoami          显示当前操作用户 host ...

  2. hibernate复习第(二)天

    今日要点: 关联映射 多对一(Employee - Department) 一对多(Department - Employee) 一对一(Person - IdCard) 多对多(teachet - ...

  3. Netty5.x中新增和值得注意的点(转载http://www.coderli.com/netty-5-new-and-noteworthy/)

    该文档会列出在Netty新版本中值得注意变化和新特性列表.帮助你的应用更好的适应新的版本.   不像Netty3.x和4.x之间的变化,5.x没有那么大的变化,不过也取得了其简化设计中的一些突破性进展 ...

  4. cudnn 卷积例子

    运行环境:linux cuda cudnn cudnn API:https://docs.nvidia.com/deeplearning/sdk/cudnn-developer-guide/index ...

  5. 微信非全屏播放设置(仅Iphone)

    由于微信X5内核强制视频全屏,用X5自带内核播放,一般内嵌视频打开播放就会被全屏. ihpone里面可以通过设置 x-webkit-airplay="true" webkit-pl ...

  6. HihoCoder1664 01间隔方阵([Offer收割]编程练习赛40)(DP)

    给定一个NxM的01矩阵,小Hi希望从中找到一个01间隔的子方阵,并且方阵的边长越大越好. 例如对于 0100100 1000101 0101010 1010101 0101010 在右下角有一个4x ...

  7. HDU3037Saving Beans(组合数+lucas定理)

    Problem Description Although winter is far away, squirrels have to work day and night to save beans. ...

  8. C++ STL, next_permutation用法。

    next_permutation 将按字母表顺序生成给定序列的下一个较大的序列,直到整个序列为 #include"iostream" #include"algorithm ...

  9. webpack打包APP的后端地址处理

    PC端我们用webpack打包,只需要写相对路径,发布的时候和后端接口在同一目录下即可. 但是做过APP或者混合开发的同学都知道,APP不需要发布的,如果后端地址还是用相对路径的话,可想而知,调用后端 ...

  10. 冷备手工完全恢复(recover database,recover tablespace,recover datafile)

    冷备手工完全恢复 1.   手工完全恢复三种级别: recover database: 所有或大部分datafile丢失,一般是在mount状态完成.recover tablespace:    非关 ...