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工程中允许自定义这两种构建方式的具体细节信息。示例如下:

posted @ 2017-05-23 16:49  王二狗的人生  阅读(508)  评论(0编辑  收藏  举报