AndroidGradle最实用的指南

AndroidStudio目前已经成为Android开发人员的主流工具,而Gradle的原理,配置,使用仍然是不少android开发人员感到困惑的地方。网上虽然有不少相关文档,可是要么是只会用可是不知道gradle的原理,要么就是过于深究Gradle和Groovy,没能和具体的android使用场景结合,致使不少人看完云里雾里。本文只针对android开发人员,结合具体使用,捎带介绍一下Gradle和Groovy的本质,但愿可让更多的android开发人员不只能知其然,更能知其因此然。html

参考书籍:linux

实战Gradleandroid

Android Gradle 权威指南git

巧用Gradle构建Android应用windows

1.  Gradle简介

2013 年,Google 发布了全新的 Android 开发 IDE————Android Studio,核心是 Google 新推出的 Gradle 编译环境。首先,咱们要明白,Android Studio 使用 Gradle 构建工具,Eclipse 的 ADT 插件使用的是 Ant 构建工具。其次,要搞明白Android Studio 为何使用 Gradle 构建工具。Gradle有什么特色呢?app

  • 采用了 Domain Specific Language(DSL 语言) 来描述和控制构建逻辑。
  • 构建文件基于 Groovy,而且容许经过混合声明 DSL 元素和使用代码来控制 DSL 元素以控制自定义的构建逻辑。
  • 支持 Maven 或者 Ivy 的依赖管理。
  • 很是灵活。容许使用最好的实现,可是不会强制实现的方式。
  • 插件能够提供本身的 DSL 和 API 以供构建文件使用。
  • 良好的 API 工具供 IDE 集成。

由此可知,Gradle 之因此强大是由于继承了强大、灵活的 Ant 和 Maven 丰富的依赖管理,配置管理简单,脚本编写方便灵活,插件模块化。jvm

 

2.  AS中的Gradle文件

Gradle的优越性让它在不少地方都有应用,本文从Android的角度来分析和使用。ide

Android中的一个项目结构一般以下:模块化

相关文件信息以下:函数

目录文件 定义
.gradle gradle项目产生文件(自动编译工具产生的文件)
.idea IDEA项目文件(开发工具产生的文件)
app 其中一个 module,复用父项目的设置,可与父项目拥有相同的配置文件
build 自动构建时生成文件的地方
gradle 自动完成 gradle 环境支持文件夹
.gitignore git源码管理文件
build.gradle gradle 项目自动编译的配置文件
gradle.properties gradle 运行环境配置文件
gradlew 自动完成 gradle 环境的 linux mac 脚本,配合 gradle 文件夹使用
gradlew.bat 自动完成 gradle 环境的 windows 脚本,配合 gradle 文件夹使用
local.properties Android SDK NDK 环境路径配置
*.iml IDEA 项目文件
setting.gradle gradle 项目的子项目包含文件

2.1  settings.gradle

为何我没有从build.gradle开始介绍,而是从settings.gradle这个文件开始呢?是由于这个问价是Gradle的设置文件,用于初始化以及工程树的配置,位置放在根工程目录下。设置文件大多数的做用是为了配置子工程。在Gradle中多工程是经过工程树表示的,就至关于As中看到的Project和Moudle的概念同样。根工程至关于AS中的Project,一个根工程能够有不少子工程,也就是不少Moudle。

一个子工程只有在settings文件里配置了Gradle才会识别,才会在构建的时候被包含进去。具体使用以下:

//定义一个名为initMinshengGradleEnvironment的函数。该函数内部完成一些初始化操做
//好比建立特定的目录,设置特定的参数等
def initTKGradleEnvironment(){  
    println"initialize TK Gradle Environment ....."  
    ......//干一些special的私活....  
    println"initialize TK Gradle Environment completes..."  
}  
//settings.gradle加载的时候,会执行initTKGradleEnvironment
initTKGradleEnvironment()
include ':voice'
include ':imagepicker' project(':imagepicker').projectDir = new File(rootDir, 'tk/imagepicker')

首先,这个文件中能够本身设置一些函数,如initTKGradleEnvironment(),这些函数会在gradle构建整个工程任务的时候执行,因此,能够在settings作一些初始化的工做。

其次,能够经过include函数,将子Project的名字(其文件夹名)包含进来 。这里要注意的是,若是像imagepicker'子工程指定了文件夹的目录,它的工程目录就是rootDir/tk/imagepicker;而像voice子工程这样没有指定相应的文件夹目录,默认目录会是其同级的目录,即Gradle会把当前与settings.gradle文件同级的voice目录做为voice子工程的工程目录。若是没有的话,会报错。

2.2  build.gradle

每一个project都会有build文件,该文件是该project构建的入口,能够在这里针对该project进行设置,好比配置版本,须要哪些插件,依赖哪些库等。AS项目结构中有两个build文件。咱们分别对其进行介绍。

2.2.1  app Moudle的build文件

Android Studio 自动建立的 module 默认生成的 build.gradle 文件,这个文件是开发中打交道最多的一个文件。

这个文件中包括apply plugin,android,greendao,repositories,dependencies等多个代码块。

android {
    compileSdkVersion project.ANDROID_BUILD_SDK_VERSION as int
    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
 
    defaultConfig {
        applicationId project.APPLICATION_ID
        versionCode project.VERSION_CODE as int
        versionName project.VERSION_NAME
        minSdkVersion project.ANDROID_BUILD_MIN_SDK_VERSION as int
        targetSdkVersion project.ANDROID_BUILD_TARGET_SDK_VERSION as int
    }
}
 
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    //这里注意是双引号
    compile "com.android.support:appcompat-v7:${SUPPORT_LIBRARY}"
    compile "com.android.support:design:${SUPPORT_LIBRARY}"
    compile "com.android.support:recyclerview-v7:${SUPPORT_LIBRARY}"
    compile "com.android.support:support-annotations:${SUPPORT_LIBRARY}"
    compile "com.android.support:cardview-v7:${SUPPORT_LIBRARY}"
    compile "com.android.support:support-v4:${SUPPORT_LIBRARY}"
}

  

2.2.2  root Project的build文件

2.3   gradle.properties

配置全局的管理文件。用来配置 gradle 运行环境的文件,好比配置 gradle 运行模式,运行时 jvm 虚拟机的大小。

## 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: -Xmx1024m -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
#Wed Mar 21 09:55:30 CST 2018
org.gradle.jvmargs=-Xmx1536m -Xmx4048m

properties实际上是Java项目中的配置文件,不是Gradle首创的。又由于Gradle语法能够和Java进行混合使用,因此在Java项目上面使用properties文件的方式,在Gradle上面也可使用。Gradle借用了这一点,因此内置了对gradle.properties的使用方式.

properties里面的数据格式采用键值对的方式,大概有如下几种写法: 
1. key=value 
2. key:value 
3. key :value 
4. # 做为注释 
在Android Studio 中最好使用第一种写法,要不会有警告。

在实际开发中,通常大型的项目都是拆分进行模块化开发的,每一个模块在合并的时候容易有冲突(好比版本冲突),或者须要改版本的时候比较麻烦,须要一个一个地方去改,这时候配置全局的 gradle.properties 文件就颇有必要了。具体参考以下设置:

## 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: -Xmx1024m -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
#Wed Mar 21 09:55:30 CST 2018
org.gradle.jvmargs=-Xmx1536m -Xmx4048m
#添加ndk支持(按需添加)
android.useDeprecatedNdk=true
# 应用版本名称
VERSION_NAME=1.0.0
# 应用版本号
VERSION_CODE=100
# 支持库版本
SUPPORT_LIBRARY=24.2.1
# MIN_SDK_VERSION
ANDROID_BUILD_MIN_SDK_VERSION=14
# TARGET_SDK_VERSION
ANDROID_BUILD_TARGET_SDK_VERSION=24
# BUILD_SDK_VERSION
ANDROID_BUILD_SDK_VERSION=24
# BUILD_TOOLS_VERSION
ANDROID_BUILD_TOOLS_VERSION=24.0.3

  

 

2.4  local.properties

Android Studio 自动建立的工程中,IDE 自动配备了本地配置文件,而且设置了 sdk.dir 属性。也就是配置了 Android_Home 环境变量,因此 IDE 可以自动生成这个配置文件。通常状况都不用修改这个配置文件,除非你必定要从新制定一个 SDK 路径。

相关文章
相关标签/搜索