Gradle构建配置

1.  介绍

Gradle是Java世界里最受欢迎的构建工具之一,基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置,并且可以通过扩展来支持其他语言(例如c++)。Google的Adroid团队2013年宣布使用gradle为首选的构建工具,如今的Android开发已经离不开gradle的各种配置,虽然Android Studio等IDE会为我们自动生成一些默认的gradle配置,但是在项目规模扩大、内部或外部依赖变多之后,了解gradle配置的意义变得至关重要。

本文主要介绍Android项目中主要的gradle配置文件及常用的配置方法,配置的含义与用法在配置文件的注释中。

2.  Android项目结构

使用Android Studio构建Android项目时,主要的gradle配置文件有settings.gradle, build.gradle(project), build.gradle(module)。

Gradle构建配置_第1张图片
项目结构及构建配置文件

3.  Gradle 设置文件

settings.gradle 文件位于项目根目录,用于指示 Gradle 在构建应用时应将哪些模块包括在内。对大多数项目而言,该文件很简单,只包括以下内容:

include ‘:app’

不过,多模块项目需要指定应包括在最终构建之中的每个模块。

4.  顶级构建文件

顶级 build.gradle 文件位于项目根目录,用于定义适用于项目中所有模块的构建配置。默认情况下,这个顶级构建文件使用 buildscript {} 代码块来定义项目中所有模块共用的 Gradle 存储区和依赖项。以下代码示例描述的默认设置和 DSL 元素可在新建项目后的顶级 build.gradle 文件中找到。

/**

* buildscript 块是用来配置仓库及gradle自身的依赖,这代表你不应该在这里引用你自身

* 项目的依赖。例如,这个配置块引用了Android的gradle插件来提供额外的gradle构建

* Android的功能

*/

buildscript {

/**

* repositories块配置了用来查找和下载依赖的Gradle仓库,gradle预支持的远程仓

* 库例如Jcenter、MavenCentral、和Ivy。你也可以使用自己的本地库或者定义你自

* 身的远程库。默认使用JCenter作为仓库

*/

repositories {

jcenter()

// 表示maven仓库中心

mavenCentral()

// 表示maven本地仓库

mavenLocal()

/**

* 指定了具体的maven远程仓库

*/

maven {

url"https://repo.example.com/maven2"

}

/**

* 指定了本地的maven仓库

*/

maven {

url "file://local/repo/"

}

}

/**

* dependencies块配置了构建项目时的依赖,下面的一行表示添加了gradle的

* Android插件作为一个classpath依赖

* 关于dependencies的具体类型参见模块级配置处的依赖

*/

dependencies {

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

}

}

/**

* allprojects块配置了你项目里所有模块用到的库和依赖,比如第三方插件或者库。不被所

* 有项目用到的插件或库应该在模块级下的build,gradle文件里。Android Studio 默认使用

* Jcenter作为默认库。

*/

allprojects {

repositories {

jcenter()

}

}

/**

* 配置在项目下的所有模块的公用的构建选项

*/

ext {

compileSdkVersion = 25

buildToolsVersion = "25.0.3"

supportLibVersion = "25.3.1"

/**

* 参见模块级build.gradle

*/

}

5.  模块级构建文件

模块级 build.gradle 文件位于每个 // 目录,用于配置适用于其所在模块的构建设置。您可以通过配置这些构建设置来提供自定义打包选项(例如附加构建类型和产品风味),以及替换 main/ 应用清单或顶级 build.gradle 文件中的设置。

以下这个示例 Android 应用模块 build.gradle 文件概述了应该了解的大部分基本 DSL 元素和设置。

/**

* 构建文件的第一行配置了gradle构建时使用的android插件并且使得android块可以配置

* 特定的构建选项

*/

apply plugin: 'com.android.application'

/**

* android块配置了特定的构建选项

*/

android {

/**

* compileSdkVersion 规定了编译时使用的API版本。这代表你的app可以使用这个版本或更低的api

*/

compileSdkVersion 25

/**

* buildToolsVersion 规定了gradle用来构建你的项目的构建工具、命令行工具、编译器的

* 版本。你应该使用SDKmanager工具下载对应的构建工具

*/

buildToolsVersion "25.0.3"

/**

* defaultConfig块封装了所有构建变体的默认设置和实体,并且可以由构建系统动态的覆盖

* main/AndroidManifest.xml清单文件里的一些属性。你可以配置项目特性来覆盖这些特性在不同版本中的值

*/

defaultConfig {

/**

* applicationId 是用来唯一识别你的发布的包,然而,这里应该参照在

* main/AndroidManifest.xml清单文件里定义的包名

*/

applicationId 'com.example.myapp'

// 定义了app运行需要的最低api版本

minSdkVersion 15

// 定义了app测试时的api版本

targetSdkVersion 25

// 版本数字

versionCode 1

//版本号

versionName "1.0"

//版本后缀

versionNameSuffix "-default"

//应用ID后缀

applicationIdSuffix '.dafault'

}

/**

* buildTypes 块配置了许多的构建类型。默认情况下,构建系统定义了两种类型:debug和release。

* debug构建类型不会显示的展示在默认的构建配置中,但是会被debugging工具所依赖并且附上debug签名。

* release构建类型使用了Proguard设置并且默认情况下没有签名

*/

buildTypes {

/**

* 默认情况下,Android Studio配置了代码压缩,并且指定了Proguard的设置文件

* 要尽可能减小 APK 文件,您应该启用压缩来移除发布构建中未使用的代码和资源

* 代码压缩通过 ProGuard 提供,ProGuard 会检测和移除封装应用中未使用的类、字段、方法和属性,

* 包括自带代码库中的未使用项ProGuard 还可优化字节码,移除未使用的代码指令,

* 以及用短名称混淆其余的类、字段和方法。

*/

release {

minifyEnabled true //为release版本启动代码压缩

/**

* getDefaultProguardFile()方法可从Android SDK tools/proguard/ 文件夹获取的ProGuard设置。

* proguard-rules.pro文件用于添加自定义ProGuard规则。默认情况下,该文件位于模块根目录(build.gradle 文件旁)。

* 具体的代码压缩参照 https://developer.android.com/studio/build/shrink-code.html

*/

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

/**

* 添加构建域,需要的3个字段依次为

* 为生成的BuildConfig类里添加一个字段

*/

buildConfigField "String", "DEMO-URL", "\"http://example.com/demo\""

}

customBuildType {

/**

* 表示复制某个buildTypes的所有参数,如这里复制了debug类型的所有参数

*/

initWith debug

}

}

/**

* productFlavors块配置了多个产品的flavor(应叫做口味,可以当做产品的功能特点),

* 这允许你可以覆盖defaultConfit配置来为你的app创建不同的版本。productFlavors是可选的,

* 并且构建系统不会自动的创建他们,这个例子创建了一个免费和一个付费的产品,

* 每个产品制定了其自身的应用ID,所以他们可以同时存在与Google Play Store或Android设备上。

*/

productFlavors {

free {

applicationId 'com.example.myapp.free'

}

paid {

applicationId 'com.example.myapp.paid'

}

}

/**

* dependencies块配置了模块级别的依赖,只在本模块内使用

* 依赖类型主要分为本地库模块依赖、本地二进制依赖、远程二进制依赖

* 使用compile添加依赖

*

*/

dependencies {

/**

* 本地库模块依赖

* 本地项目中需要有一个模块名为lib

*/

compile project(":lib")

/**

* 远程二进制依赖

* 根据配置好的仓库查找对应的依赖

*/

compile 'com.example.android:app-magic:12.3'

//以上也可以显示的指定为group name version

compile group: 'com.example.android', name: 'app-magic', version: '12.3'

/**

* 本地二进制依赖

* 因为gradle读取路径时是相对于build.gradle文件的,所以这个配置告诉构建系统需要添加位于

* moduleName/libs/下的jar文件为依赖

*/

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

//上一个也可以定义为这样

compile files('libs/foo.jar', 'libs/bar.jar')

/**

* 可以指定只在测试阶段添加的依赖

*/

testCompile 'junit:junit:4.12'

}

}

更多的配置相关内容待续...

你可能感兴趣的:(Gradle构建配置)