Gradle用户使用指南
转载请事先沟通,未经允许,谢绝转载。
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用户使用指南的更多相关文章
- Gradle用户指南(章9:Groovy快速入门)
Gradle用户指南(章9:Groovy快速入门) 你可以使用groovy插件来构建groovy项目.这个插件继承了java插件的功能,且扩展了groovy编译.你的项目可以包含groovy代码.ja ...
- 《gradle 用户指南中文版》目录
gradle 用户指南 版权所有©2007-2017 Hans Dockter,Adam Murdoch只要您不对这些副本收取任何费用,并且进一步规定,每个副本都包含本版权声明,无论是以印刷版还是电子 ...
- gradle用户目录本地库移动设置
gradle被越来越多的程序开发人员使用来构件项目代码,使用gradle依赖的第三方jar包有时候非常占空间,默认这样的用户本地库目录(缓存目录)在系统盘上,我们可以修改用户目录到其它盘上 工具/原料 ...
- "WannaCry"勒索病毒用户处置指南
"WannaCry"勒索病毒用户处置指南 原文: http://mp.weixin.qq.com/s/ExsribKum9-AN1ToT10Zog 卡巴斯基,下载官网:h ...
- 云资源中的低成本战斗机——竞价实例,AWS、阿里云等六家云厂商完全用户使用指南
云端资源价格 预留实例:长期持有,批发路线,价格最便宜. 按需实例:即买即用,零售路线,价格最贵. 这两种资源,基于不同区域/价格的六家云厂商价格对比,连同原始数据文档我们已经打包成了一份电子文档,有 ...
- Gradle用户指南(1)-Gradle安装
前置条件 Gradle 需要 Java JDK 或者 JRE,版本是 6 及以上.Gradle 将会装载自己的 Groovy 库,因此,Groovy 不需要被安装.任何存在的 Groovy 安装都会被 ...
- Gradle用户指南
下载安装gradle 2.1 下载地址:http://www.gradle.org/learn 安装先决条件:gradle安装需要1.6或者更高版本的jdk(jre)(可以使用java –versio ...
- 《gradle 用户指南中文版》 第一部分、关于Gradle
第一部分.关于Gradle 目录1.介绍1.1 关于本用户指南2.概述2.1 特性2.2 为什么选择Groovy? 上一页 | 目录 | 下一页
- 《gradle 用户指南中文版》 第1章、简介
第1章.简介 目录 1.1 关于本用户指南 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具. 这里我们将介绍Gradle,我们认为gradle让java项 ...
随机推荐
- linux-常用指令3
系统管理命令 stat 显示指定文件的详细信息,比ls更详细 who 显示在线登陆用户 whoami 显示当前操作用户 host ...
- hibernate复习第(二)天
今日要点: 关联映射 多对一(Employee - Department) 一对多(Department - Employee) 一对一(Person - IdCard) 多对多(teachet - ...
- Netty5.x中新增和值得注意的点(转载http://www.coderli.com/netty-5-new-and-noteworthy/)
该文档会列出在Netty新版本中值得注意变化和新特性列表.帮助你的应用更好的适应新的版本. 不像Netty3.x和4.x之间的变化,5.x没有那么大的变化,不过也取得了其简化设计中的一些突破性进展 ...
- cudnn 卷积例子
运行环境:linux cuda cudnn cudnn API:https://docs.nvidia.com/deeplearning/sdk/cudnn-developer-guide/index ...
- 微信非全屏播放设置(仅Iphone)
由于微信X5内核强制视频全屏,用X5自带内核播放,一般内嵌视频打开播放就会被全屏. ihpone里面可以通过设置 x-webkit-airplay="true" webkit-pl ...
- HihoCoder1664 01间隔方阵([Offer收割]编程练习赛40)(DP)
给定一个NxM的01矩阵,小Hi希望从中找到一个01间隔的子方阵,并且方阵的边长越大越好. 例如对于 0100100 1000101 0101010 1010101 0101010 在右下角有一个4x ...
- HDU3037Saving Beans(组合数+lucas定理)
Problem Description Although winter is far away, squirrels have to work day and night to save beans. ...
- C++ STL, next_permutation用法。
next_permutation 将按字母表顺序生成给定序列的下一个较大的序列,直到整个序列为 #include"iostream" #include"algorithm ...
- webpack打包APP的后端地址处理
PC端我们用webpack打包,只需要写相对路径,发布的时候和后端接口在同一目录下即可. 但是做过APP或者混合开发的同学都知道,APP不需要发布的,如果后端地址还是用相对路径的话,可想而知,调用后端 ...
- 冷备手工完全恢复(recover database,recover tablespace,recover datafile)
冷备手工完全恢复 1. 手工完全恢复三种级别: recover database: 所有或大部分datafile丢失,一般是在mount状态完成.recover tablespace: 非关 ...