Gradle系列《一》: 基础概念

什么是Gradle

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。——维基百科

以下简要介绍几个相关概念:
1. 建构工具做的工作包括:编译源代码、运行测试、拷贝Class文件到目标目录、签名、打包、依赖管理等。目的是让开发人员更加专注于代码的编写。
2. Groovy:是Java平台上设计的面向对象编程语言。这门动态语言拥有类似Python、Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用。Groovy的语法与Java非常相似。

相对于Ant和Maven来说,Gradle可以算是新一代的自动化构建工具,而且Gradle在基于它们的基础上优化的同时还可以兼容这两者。

Gradle与Android Studio

Android Studio(以下采用缩写AS)采用的构建工具即Gradle,Gradle可以辅助我们简化很多复杂的操作流程如:依赖管理、多渠道打包、签名信息配置、批量修改生成的apk文件名等,因此学习Gradle显得更为重要。当然,以下的介绍的Gradle相关特性和使用都是以AS为例的。

Android Studio工程中与Gradle相关的目录

使用Android Studio新建一个工程之后,其目录结构是这样的(需要强调一下,以下的目录结构以及文件内容都只是新建项目时默认的样子,更高级的用法以及特点将会在后续的章节提及):
├── app········· #Android App目录
│ ├── app.iml···············AS识别项目的配置文件
│ ├── build··················#模块构建输出目录(代码编译后生成的文件存放的位置、生成的Apk文件等)
│ ├── build.gradle····#module构建脚本
│ ├── libs····················· 相关库文件目录
│ ├── proguard-rules.pro··proguard混淆配置
│ └── src·······················源代码,资源等

├── build··············#构建输出目录
│ ├── generated
│ └── intermediates

├── build.gradle·····#工程构建文件

├── gradle
│ └── wrapper

├── gradle.properties······#gradle相关的全局属性设置
├── gradlew ·························#linux下的gradle wrapper可执行文件
├── gradlew.bat ·················#windows下的gradle wrapper可执行文件
├── local.properties···········配置Androod SDK位置文件
└── settings.gradle··········#工程配置
接下来详细介绍几个与Gradle相关的文件以及目录:

  • build.gradle #工程构建文件
    顶级构建文件,可以为所有子项目/模块添加常用的配置选项。
//buildscript中的声明是gradle脚本自身需要使用的资源
//可以声明的资源包括依赖项、第三方插件、maven仓库地址等。
buildscript {
    repositories {
        jcenter()  //使用jcenter库
        //mavenCentral()
    }
    dependencies {
        // 配置使用gradle所需要依赖的版本库
        classpath 'com.android.tools.build:gradle:2.1.0'
        //注意:不要在这里配置项目所需要的依赖
    }
}

//项目自身所需要的一些配置
allprojects {
    repositories {
        jcenter()
    }
}
  • app/build.gradle #module构建文件
    模块(module)中的构建文件,对当前模块生效。开发过程中最需要注重的一个文件,应用的相关特性都在这里进行配置。
//表示该module是一个应用(application)模块,应用了com.android.application插件;
//(如果是一个android library,那么这里的是apply plugin:'com.android.library')
apply plugin: 'com.android.application'

//安卓项目相关的配置,后续章节将进行更为详细的介绍
android {
    //编译项目所用的SDK版本(即编译时的API版本),com.android.support的版本需要与这个一致
    //建议(总是)采用最新版本
    compileSdkVersion 23
    //构建工具版本
    buildToolsVersion "23.0.3"

    defaultConfig {
        //安装时,依据该ID区分是否为同一个应用
        applicationId "com.wiky.supporttest"

        //最低支持的系统版本(必须>=所有依赖库所支持的最低版本)
        minSdkVersion 9

        //举例说明其作用:假设我们compileSdkVersion采用了23(6.0),但是项目暂时还未对6.0的特性(如运行时权限)做相应的处理,
        //那么可以设置targetSdkVersion的版本低于23。这样,应用仍可以正常运行在6.0的机子上(当然也就不具有运行时权限的特性)。
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    // buildTypes是构建类型,常用的有release和debug两种,可以在这里面启用混淆,启用zipAlign以及配置签名信息等。后面再具体介绍
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

//该module所需的依赖库配置
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'

}

PS:关于compileSdkVersion 和 buildToolsVersion这两个版本,在我们导入一些开源的项目时,也是需要关注的。最好在导入项目之前,找到对应的build.gradle文件,然后将其版本号改为当前可正常使用的版本号(即你本地能够顺利运行的项目中对应的版本号)。这样可以很大程度上避免导入项目时的“卡死”(构建中…)现象。

  • settings.gradle #工程配置
    这个文件是全局的项目配置文件,里面主要声明一些需要加入 gradle 的 module,即告诉gradle项目中有哪些模块(module)需要处理,文件内容:
//如果有多个module的话,格式如:include ':app', ':otherModule',..... 
include ':app'
  • gradle.properties #gradle相关的全局属性设置
    在google开源的[iosched][1]项目中,可以看到他们利用了该文件配置了一些builde.gradle中需要用到的常(变)量, 如com.android.support. 的版本号以及签名信息相关的配置。利用该文件进行统一依赖管理可参见:[Gradle统一依赖管理][2]

  • gradle.wrapper (Gradle Wrapper )
    它允许你的机器在不需要安装运行的情况下就能运行Gradle脚本(我们在下载AS后可以直接开始使用gradle、开发项目,而无需另外下载及安装gradle,主要归功于这一特性),而且更重要的是它确保了build脚本运行在指定版本的Gradle。它会从中央仓库中自动下载Gradle,解压到你的文件系统,然后用来build。

参考资料:

Gradle User Guide

Gradle In Action(Gradle实战)中文版

如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值