您的位置:首页 > 其它

gradle笔记

2015-09-26 16:58 183 查看
所谓好记性不如赖笔头今天记一下gradle的一点基础知识。

一:基础

gradle是Android开发中的项目构建系统,其特点如下:

1. 打包、签名与发布方便

2. 使用领域驱动语言(DSL)来描述构建逻辑,构建脚本使用Groovy

3. 内建的依赖管理系统,使用Maven或者Ivy

看一个最简单的Android项目build.gralde

buildscript {
repositories {
//使用maven中央仓库构建代码
mavenCentral()
}
dependencies {
//gradle插件版本号:
classpath 'com.android.tools.build:gradle:1.2.3'
}
}

apply plugin: 'android'

android {
compileSdkVersion 22
buildToolsVersion "22.0.1"

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 {
manifest.srcFile 'tests/AndroidManifest.xml'
java.srcDirs = ['tests/src']
resources.srcDirs = ['tests/src']
aidl.srcDirs = ['tests/src']
renderscript.srcDirs = ['tests/src']
res.srcDirs = ['tests/res']
assets.srcDirs = ['tests/assets']
}

debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
signingConfig signingConfigs.release
}
debug {
debuggable true
minifyEnabled false
signingConfig signingConfigs.release
}
alpha {
debuggable true
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
}

dependencies {

//本地libs目录依赖模式:
compile fileTree(dir: 'libs', include: '*.jar')

//本地项目依赖模式:
compile project(':Library')

//远程依赖模式:

compile 'com.android.support:support-v4:19.+'
compile 'com.android.support:appcompat-v7:19.+'
compile 'com.android.support:recyclerview-v7:+'
compile 'com.jakewharton:butterknife:6.1.0'
compile 'de.greenrobot:eventbus:2.4.0'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
compile 'com.squareup.dagger:dagger:1.2.2'
apt 'com.squareup.dagger:dagger-compiler:1.2.2'

}


上面的代码中就声明了我们的构建程序会使用Maven中央仓库。

buildscript { ... } 配置驱动构建过程的代码,意思就是buildscript中的配置仅仅在构建过程中起作用,也就是构建程序所使用的配置。

apply plugin: 'android' 是指使用Android插件。

android { ... } 配置了Android项目构建时需要的所有参数。

sourceSets { ... } 指项目的目录结构

buildTypes{ ... } 指项目的编译版本类型

minifyEnabled 是否混淆

proguardFiles 混淆规则文件

debuggable 可否调试

signingConfig 签名类型

dependencies { ... } 指项目所依赖的库

二:提高

Gradle脚本是使用Groovy语言来写的,Groovy中有一个很重要的概念你必要要弄懂–Closure(闭包)。从 从 C/C++ 语言的角度看 , 闭包和函数指针很像,如果闭包没定义参数的话 , 则隐含有一个参数 ,叫 这个参数名字叫 it ,和 和 this 的作用类

似 。

Closure 的定义格式是:

defClosure = {paramters -> code} //或者

def Closure = {无参数,纯 code} 这种情况不需要->符号

例如:

def closure = {// 闭包是一段代码 , 所以需要用花括号括起来..

String param1, int param2 -> //箭头很关键。前面是参数定义,后面是代码

println "this is code" //这是代码,最后一句是返回值,

}

Closure可以当做参数传递,把closure当做参数传递有以下几种语法规则:

1.只接收一个参数,且参数是closure的方法: myMethod(myClosure)

2.如果方法只接收一个参数,括号可以省略: myMethod myClosure

3.可以使用内联的closure:myMethod {println‘Hello World’} //gradle中常见的写法

4.接收两个参数的方法: myMethod(arg1, myClosure)

5.和4类似,单数closure是内联的: myMethod(arg1, { println ‘Hello World’ })

6.如果最后一个参数是closure,它可以从小括号从拿出来: myMethod(arg1) { println ‘Hello World’ }

这个特点非常关键,因为以后在 Gradle 中经常会出现图 7 这样的代码:

buildscript { ... }

android { ... }

sourceSets { ... }

这样再回过头去看gradle就很容易理解了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: