从最基本结构说起

新建一个helloworld工程结构:

工程目录下只有根目录和一个app模块,没有其他模块。

根目录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:1.5.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

首先,区分一个概念:编译系统自身被编译的内容,见stackoverflow

gradle自身是一个编译系统,它的版本配置在AS的设置中。
Android tools的gradle插件,是google开发的在一个gradle插件,在gralde中使用,可以让gradle支持编译Android应用程序。也就是说

此外buildsystem还可能依赖一些其他常用的库/插件,编译注解常用的apt:

groovy dependencies { classpath 'com.android.tools.build:gradle:1.5.0' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' }

}
```

}
// 例如定义一下task运行某个模块的单元测试
task runDomainUnitTests(dependsOn: [':domain:test']) {
description 'Run unit tests for the domain layer.'
}
task runDataUnitTests(dependsOn: [':data:cleanTestDebugUnitTest', ':data:testDebugUnitTest']) {
description 'Run unit tests for the data layer.'
}
task runUnitTests(dependsOn: ['runDomainUnitTests', 'runDataUnitTests']) {
description 'Run unit tests for both domain and data layers.'
}


* 其他内容:是否需要 `apply plugin: 'com.android.application'`?这个例子中不可以,application插件一般放在app模块。
	> 有些特别的例子(比如eclipse转换成的as工程),根目录就是app模块,此时的app的build.gradle与根目录的build.gradle是一个文件,所有可以这么写。[android gradle的官方demo](http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Basic-Project-Setup)中,最简单的gradle工程也是用了一个`build.gradle`文件。

### 根目录的settings.gradle
```groovy
include ':app'

这个文件最简单,含义是这个项目包括的所有模块的名字(位置),这里的含义是根目录下面的app模块,如果是子目录,需要写出目录

include ':app'
// 子目录third_party下的android_support模块
include 'third_party:android_support'
// 也可以这样写
// include ':app', 'third_party:android_support'

注意:一个特例:当根目录就是app模块是不需要在setting.gradle中写出。

app模块build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.baidu.helloworld"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}



dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.1'
}

这个是android app配置的主要内容,从顶层开始看:apply plugin,android,dependencies三大区块内容(除此此外还可以有repositoriesconfigurations)。

其他

一些待理解的问题

工程实践

参考clean构架的demo,总结几点

深入学习