安卓Gradle Plugin

Project 和 task

项目结构中的每个build.gradle文件代表一个project,在这编译脚本文件中可以定义一系列的task;
task 本质上又是由一组被顺序执行的Action`对象构成,Action其实是一段代码块,类似于Java中的方法。

参考:来源(请点击)

Android Gradle 构建生命周期

每次构建的执行本质上执行一系列的Task。某些Task可能依赖其他Task。
那些没有依赖的Task总会被最先执行,而且每个Task只会被执行一遍。每次构建的依赖关系是在构建的配置阶段确定的。

Initialization: 初始化阶段

这是创建Project阶段,构建工具根据每个build.gradle文件创建出一个Project实例。
初始化阶段会执行项目根目录下的settings.gradle文件,来分析哪些项目参与构建。

告诉Gradle这些项目需要编译,所以我们引入一些开源的项目的时候,需要在这里填上对应的项目名称,来告诉Gradle这些项目需要参与构建
settings.gradle

include ':demo', ':library'

Configuration:配置阶段

这个阶段,通过执行构建脚本来为每个project创建并配置Task。
配置阶段会去加载所有参与构建的项目的build.gradle文件,会将每个build.gradle文件实例化为一个Gradle的project对象。
然后分析project之间的依赖关系,下载依赖文件,分析project下的task之间的依赖关系。

Execution:执行阶段

这是Task真正被执行的阶段,Gradle会根据依赖关系决定哪些Task需要被执行,以及执行的先后顺序。
task是Gradle中的最小执行单元,我们所有的构建,编译,打包,debug,test等都是执行了某一个task。
一个project可以有多个task,task之间可以互相依赖。
例如我有两个task,taskA和taskB,指定taskA依赖taskB,然后执行taskA,这时会先去执行taskB,taskB执行完毕后在执行taskA。

Android Gradle构建文件详细信息

root—
settings.gradle
gradle.properties
build.gradle
demo——–build.gradle
library—–build.gradle
|
|

settings.gradle

include ':demo', ':library'

gradle.properties

VERSION_NAME=1.2.0   // 在gradle.properties文件下定义了一些宏属性 方便在程序中获得
VERSION_CODE=22
GROUP=com.daimajia.swipelayout
ANDROID_BUILD_MIN_SDK_VERSION=9
ANDROID_BUILD_TARGET_SDK_VERSION=25
ANDROID_BUILD_SDK_VERSION=25
ANDROID_BUILD_TOOLS_VERSION=25.0.2

根root:settings.gradle

这个文件用来配置针对所有模块的一些属性。它默认包含2个代码块:
buildscript{…}和allprojects{…}

buildscript{…} 配置构建脚本所用到的代码库和依赖关系
allprojects{…} 定义所有模块需要用到的一些公共属性

buildscript {
    repositories {
        jcenter()     // 配置代码仓库使用   jcenter() 和 maven
        maven {
            url "https://jitpack.io"
        }
    }
    dependencies {   // 配置脚本的依赖关系 使用 把 com.android.tools.build:gradle:2.3.0 这个安卓Gradle Plugin 加入到classpth中
//buildscript:定义了 Android 编译工具的类路径  
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'com.github.dcendents:android-maven-plugin:1.2'
    }
}

allprojects {// 定义所有模块需要用到的一些公共属性 
    repositories {
        jcenter()   // 所有模块都使用  jcenter() 这个代码仓库  jCenter是一个著名的 Maven 仓库
        maven {
            url "https://jitpack.io"
        }
    }

    task alltaskDemo << {   //执行gradle alltaskDemo 定义了 所有 module 包括 本身project 都包含的共同方法 alltaskDemo
        println project.name
    }
}

subprojects {  //  // Project 的为所有的子Project 不包括本身 起作用的  方法  执行  gradle subtask 
    task subTask << {
        println project.name
    }
}

project(':demo') { // 为子Modle  :demo定义任务task 
    task demoTask << {
        println 'add  demoTask in root build.gradle'
    }
}

task clean(type: Delete) {  // 为project本身 添加一个 Task , 这个task 用于删除根目录下的buildDir文件夹
    delete rootProject.buildDir  // 【D:\version\9GAG-master\build 】
}

应用 demo:settings.gradle

在该文件下默认有3个重要的代码块:plugin,android 和 dependencies

apply plugin: 'com.android.application'   // 应用com.android.application这个Plugin  说明 编译出来是APK

repositories {  // 指定 jcenter() 这个代码仓库  其实root: settings.gradle已经指定了
    jcenter()
}



android { // android代码块用于配置 应用的各种配置编译信息
// project.ANDROID_BUILD_SDK_VERSION 为  ANDROID_BUILD_SDK_VERSION=25 在 gradle.properties 文件中定义
    compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION) // 当前APK编译使用的SDK版本 25
    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION //  安卓编译工具版本 25.0.2 
    defaultConfig {
        minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION)// 最小支持的SDK版本位 9
        targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION) // 目标SDK版本 25
        versionName project.VERSION_NAME   // 工程APP的名称
        versionCode Integer.parseInt(project.VERSION_CODE) // 工程APP的版本号
    }
    buildTypes {  // 定义了编译类型 详情看下面
        release {  // release发布 编译类型  区别于 debug编译类型
            minifyEnabled false  // minifyEnabled 表示是否混淆  
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  //proguardFiles 混淆文件
        }
    }
    lintOptions {  // 忽略编译器的 lint 检查
        abortOnError false
    }
}

dependencies {  // 定义依赖关系项 
    compile project(":library")   // 编译本Module时 依赖本地另一个:library  这个Module
    compile 'com.android.support:recyclerview-v7:25.1.1'  // 编译时依赖的jcenter 包 每个库名称包含三个元素:组名:库名称:版本号
    // compile files('libs/YibaAnalytics5.jar')  // 表示依赖本地的  libs/YibaAnalytics5.jar 这个JAR包

    // flatDir {  dirs '../aar' }     // ../aar 表示根目录下的 aar 文件夹
      //compile(name:'YibaAnalytics-release', ext:'aar') // 自定义依赖包目录   并添加编译依赖

    compile 'com.daimajia.easing:library:1.0.0@aar'
    compile 'com.daimajia.androidanimations:library:1.1.2@aar'
    compile 'com.nineoldandroids:library:2.4.0'
    // This dude gave a shoutout to you (daimajia) on his github page:
    compile 'jp.wasabeef:recyclerview-animators:1.0.3@aar'
}
buildTypes的属性
name:build type的名字
applicationIdSuffix:应用id后缀
versionNameSuffix:版本名称后缀
debuggable:是否生成一个debug的apk
minifyEnabled:是否混淆
proguardFiles:混淆文件
signingConfig:签名配置
manifestPlaceholders:清单占位符
shrinkResources:是否去除未利用的资源,默认false,表示不去除。
zipAlignEnable:是否使用zipalign工具压缩。
multiDexEnabled:是否拆成多个Dex
multiDexKeepFile:指定文本文件编译进主Dex文件中
multiDexKeepProguard:指定混淆文件编译进主Dex文件中

应用 library:settings.gradle

apply plugin: 'com.android.library'   // 指定本module 生成 lib库文件

android {
    compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
    }
}

dependencies { // 编译时依赖
    compile 'com.android.support:recyclerview-v7:25.2.0'
    compile 'com.android.support:support-v4:25.2.0'
    //compile 'com.android.support:support-v4:+'
    //compile 'com.android.support:support-v4:24.1.1'
}
apply from: './gradle-mvn-push.gradle'

// build a jar with source files
task sourcesJar(type: Jar) { // 定义一个把源码生成jar包的任务task
    from android.sourceSets.main.java.srcDirs        // 源input为路径main这个sourceSets下的 main.java.srcDirs
    classifier = 'sources'
}

artifacts {  // artifacts 貌似在  'com.android.library' 这个plugin提供的方法属性  ,artifacts的archives属性表示 执行的编译构建任务
    archives sourcesJar
}

你可能感兴趣的:(工具软件)