Gradle for Android

对Gradle的基本理解

一个基于Gradle的Android工程,必须有一个build.grade构建脚本,而我们用Android Studio创建工程时,Studio以为我们自动生成了该脚本文件。每个Module也会对应各自的一个构建脚本build.grade文件。

Gradle脚本不是像传统的xml文件那样,而是一种基于Groovy的动态DSL,而Groovy语言是一种基于jvm的动态语言。

在grade中两大概念:project和tasks。
Android studio中的project和Gradle中的project不是一个概念。
每个project有至少一个tasks。每一个build.grade文件代表着一个project。tasks在build.gradle中定义。
当初始化构建进程,gradle会基于build文件,集合所有的project和tasks,一个tasks包含了一系列动作,
然后它们将会按照顺序执行,一个动作就是一段被执行的代码,很像Java中的方法。

Android中的Gradle脚本文件

Android的build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
    } 
}

这就是实际构建开始的地方,仓库地址,使用了JCenter,JCenter类似maven库,grade还支持其他几个仓库,不论是远程还是本地仓库。

每个Module构建脚本的第一行都会声明使用什么插件:

apply plugin: 'com.android.application'

每个Android应用都需要一个插件:’com.android.application’;依赖库插件为’com.android.library’。(两插件不能同时使用)
插件用于扩展gradle脚本的能力,在一个项目中使用插件,这样该项目的构建脚本就可以定义该插件定义好的属性和使用它的tasks。

当使用Android 插件的时候,Android标签将可以被使用,如:

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    //设置代码文件源,一般用于导入旧的eclipse Android工程
    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.setRoot('tests')
    }

}

Gradle 基本构建命令

  • tasks:命令行,导航到项目文件夹下,命令,列出所以可运行的tasks

    $ gradlew tasks

  • assemble:开发时,构建项目,你需要运行assemble task通过debug配置

    $ gradlew assembleDebug

    该任务将会创建一个debug版本的app,同时Android插件会将其保存在MyApp/app/build/ outputs/apk目录下。

  • check 运行所以的checks,这意味着运行所有的tests在已连的设备或模拟器上

  • build 是check和assemble的集合体

  • clean 清楚项目的output文件