快捷搜索:  汽车  科技

gradle操作指南(Gradle基本认识及理解)

gradle操作指南(Gradle基本认识及理解)* 比ant, maven更加灵活强大且简单的构建能力###优势(gradle provides): Gradle是什么?gradle首先可以理解为一个项目构建工具,或者理解深入点,是一种编程框架,安卓项目最流行的也是google官方推荐的安卓项目编译工具。官方介绍如下:可见gradle有多么高的认可度,所以是值得java程序员特别android程序员熟练掌握并应用的一项技能!

gradle基本认识及理解

date: 2016-12-09 16:39:53


> A build system that we think is a quantum leap for build technology in the java (JVM) world.

> gradle是java编译技术领域中一个跨越性飞跃。

gradle操作指南(Gradle基本认识及理解)(1)

Gradle是什么?

gradle首先可以理解为一个项目构建工具,或者理解深入点,是一种编程框架,安卓项目最流行的也是google官方推荐的安卓项目编译工具。官方介绍如下:

可见gradle有多么高的认可度,所以是值得java程序员特别android程序员熟练掌握并应用的一项技能!

Gradle 强大再哪里?为何选择她?

###优势(gradle provides):

  • * 比ant, maven更加灵活强大且简单的构建能力

  • * 强大(powerful support)的多项目(multi-project)编译支持

  • * 强大的项目依赖关系管理

  • * 完善的maven 库支持(repository infrastructure)

  • * 简单强大的Groovy语言

  • * 技术成熟,可以处理大规模构建

  • * 可定制插件(plugin),自定义能力强

  • * 总之,是java程序员首先编译工具~

Gradle安装及环境部署

### 安装

## 项目结构基本认识

Gradle项目有两个概念,project和task Project为一个项目,Task为一次构建任务中的一个个别任务,Task是隶属与project的,每次build可以有多个project. Gradle以module为单位来管理project.

这里我们已一个安卓项目来说明gradle的基本项目构建结果。

### Gradle管理的Android项目基本结构

gradle操作指南(Gradle基本认识及理解)(2)

一个项目的根目录下放置了整个项目构建的相关配置,除了gradle wrapper相关文件外,放置了整个项目的相关配置。

app目录为项目主目录,主项目module放在里面,submodule目录下可以放多个附属项目。每个module项目根目录有个build.gradle文件,定义了该module是如何编译的。

#### 1 *settings.gradle*为整个项目的多个module配置,如:

```

include ':App' ':WaveProgress'

include ':SwitchButton'

project(':SwitchButton').projectDir = new File('submodules/SwitchButton')

project(':WaveProgress').projectDir = new File('submodules/Waveprogress/app')

```

如何各个module的根目录即为整个项目的根目录,则不用指定projectDir.

#### 2 *local.properties* 为放置本地pc相关配置路径,如相关sdk保存路径,此文件无需同步保存。

```

ndk.dir=/home/android-sdk-linux/ndk-bundle

sdk.dir=/home/android-sdk-linux

```

#### 3 *gradle.properties* 为gradle设置或赋值一些变量

```

## Project-wide Gradle settings.

#

# For more details on how to configure your build environment visit

# http://www.gradle.org/docs/current/userguide/build_environment.html

#

# Specifies the JVM arguments used for the daemon process.

# The setting is particularly useful for tweaking memory settings.

# Default value: -Xmx10248m -XX:MaxPermSize=256m

# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX: HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

#

# When configured Gradle will run in incubating parallel mode.

# This option should only be used with decoupled projects. More details visit

# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects

# org.gradle.parallel=true

#Thu Jan 21 20:02:21 CST 2016

systemProp.http.proxyHost=127.0.0.1

systemProp.http.proxyPort=8118

```

#### 4 根目录下*build.gradle*

```

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

repositories {

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:2.1.2'

}

}

allprojects {

repositories {

jcenter()

}

}

```

这里定义了整个项目的相关全局变量及引用,默认android项目会在这里引用jcenter()代码仓库。gradle有三种仓库可以在这里设置,*maven* *ivy* 及本地 *flat*仓库。

```

maven{

url '...'

}

ivy{

url '...'

}

flatDir{

url '...'

}

```

当然这些仓库可以定义别名,直接引用别名更方便如:

```

repositories {

jcenter()

}

```

有些场景maven也需要引用本地库 如java项目中引用一些android库。maven也可以设置m2repository目录,如:

```

maven {

url "/home/android-sdk-linux/extras/android/m2repository"

}

```

#### 5 android编译文件build.gradle

```

//添加插件

apply plugin: 'com.android.application' //安卓项目插件

apply plugin: 'com.neenbedankt.android-apt' //可以添加多个插件

android {

compileSdkVersion 24 //编译版本

buildToolsVersion deps.bTVersion //编译工具版本

defaultConfig { //项目默认配置,会应用到buildTypes相关版本上

applicationId "com.canking.bind.cxinjectdemo"

minSdkVersion 15

targetSdkVersion 24

versionCode 1

versionName "1.0"

}

buildTypes {//编译版本控制,可以配置多个

release {

minifyEnabled false //混淆

proguardFiles getDefaultProguardFile('proguard-android.txt') 'proguard-rules.pro'

}

}

}

dependencies {//依赖模块

compile fileTree(dir: 'libs' include: ['*.jar'])

compile deps.supportCompat

compile deps.supportv7

testCompile 'junit:junit:4.12'

compile project(':bindview')

compile project(':annimationlib')

apt project(':javabind')

}

```

### Gradle任务

gradle的安卓插件提供了4个定级任务:

  1. assemble 构建项目输出

  2. check 运行检测和测试任务

  3. build 为assemble和check接合体

  4. clean 清理任务

定级任务回合buildTypes中不同版本组合为新的不同任务。

如:

```

./gradlew assembleDebug

```

细心的同学会在介绍Gradle Wrapper的时候发现,gradle命令是支持首字母简写的,如:

gradlw cW

./gradlw aD

```

通过 `gradle tasks` 可以查看项目多有的task任务。

gradle操作指南(Gradle基本认识及理解)(3)

问题

gradle项目编译如何自定义化,比如项目build.gradle如何扩展,如何如自己打包逻辑等待,想掌握这些技能就需要学习gradle的编写语言Groovy 更灵活的构建系统,帮助我们构建更复杂的项目。

所有,下节将一起学习Groovy语音的基础,深入了解Gradle.

作者主页:http://www.canking.win/

新浪:http://weibo.com/canking666

猜您喜欢: