Gradle 概述
- Gradle是一種基于 Apache Ant 和 Apache Maven 概念的項(xiàng)目自動化建構(gòu)工具冀宴,它拋棄了基于 XML 的構(gòu)建腳本繁瑣的配置现恼,取而代之的是采用一種基于 Groovy(基于 Java) 的內(nèi)部領(lǐng)域特定語言(DSL)翰守,來聲明項(xiàng)目設(shè)置库糠。
- Gradle 以module 來管理 Project沙兰,在 Gradle 構(gòu)建的 Gradle Project 中通常包含 application module(com.android.application)與 library module(com.android.library)兩種 module。
- Gradle這個工具集成了構(gòu)抒钱、測試蜓肆、發(fā)布和其他,比如軟件打包谋币,生成注釋文檔等功能仗扬。
- 目前主流的打包方式有 ant、maven蕾额、gradle早芭。gradle 是近幾年發(fā)展起來的自動化構(gòu)建工具,解決 an t構(gòu)建上的繁瑣代碼诅蝶。比如在 ant 上發(fā)布多渠道的包退个,你需要自己寫腳本替換渠道名稱,而在 gradle 中就不需要了调炬。已經(jīng)內(nèi)建支持多渠道打包帜乞。
Gradle 生命周期
gradle 構(gòu)建一個工程主要分為三部分:
初始化階段:主要是解析 setting.gradle 文件郎哭。
讀取配置階段:主要是解析所有的 projects 下的 build.gradle 文件豌拙,包括 rootProject 和其他的 subprojects(子項(xiàng)目)澳眷,檢查語法,確定 tasks 依賴以建立 task 的有向無循環(huán)圖匀谣,檢查 task 里引用的文件目錄是否存在等(這一步也進(jìn)一步驗(yàn)證了減少 setting.gradle 里的 module 數(shù)量可以加快編譯速度,因?yàn)闇p少一個 module 资溃,需要解析的 build.gradle 文件就減少一個武翎,第 3 步里就不會執(zhí)行本屬于這個 module 的任務(wù)了)
執(zhí)行階段:按照 上一個階段中建立的有向無循環(huán)圖來執(zhí)行每一個 task ,整個編譯過程中溶锭,這一步基本會占去 9 成以上的時間宝恶,尤其是對于 Android 項(xiàng)目來講,將 java 轉(zhuǎn)為 class
compileDebugJavaWithJavac/compileReleaseJavaWithJavac
和將 class 合并成 dex
transformClassesWithDexForDebug/transformClassesWithDexForRelease
基礎(chǔ)
一個 Android Studio 項(xiàng)目中,會存在多個 .gradle 文件垫毙。其中 Project 目錄下存在一個 工程 build.gradle 文件霹疫,而每一個 module 會存在一個 build.gradle 文件。
工程中的 build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
//聲明使用jcenter()庫综芥,可以理解成一個新的中央遠(yuǎn)程庫丽蝎,可以把自己的庫上傳到j(luò)ecenter()供別人一起使用,兼容maven中心倉庫膀藐,而且性能更優(yōu)屠阻。
jcenter()
}
dependencies {
//依賴android提供的2.2.1的 gradle build
classpath 'com.android.tools.build:gradle:2.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//為所有的工程的repositories配置為jcenters
allprojects {
repositories {
jcenter()
}
}
//清楚工程的任務(wù)
task clean(type: Delete) {
delete rootProject.buildDir
}
模塊中的 build.gradle
//這表示module是一個安卓項(xiàng)目
apply plugin: 'com.android.application'
// 配置了所有android構(gòu)建的參數(shù)
android {
// 表示是基于哪個Sdk版本編譯
compileSdkVersion 24
//基于哪個構(gòu)建工具版本進(jìn)行構(gòu)建的
buildToolsVersion "24.0.2"
//缺省配置主要包括:應(yīng)用ID、最小SDK版本额各、目標(biāo)SDK版本国觉、應(yīng)用版本號和應(yīng)用版本名
defaultConfig {
applicationId "com.example.newam.helloworld"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
//buildTypes是構(gòu)建類型,常用的有release和debug兩種虾啦,可以在這里面啟用混淆麻诀,啟用zipAlign以及配置簽名信息等。
buildTypes {
release {
//是否啟用代碼混淆
minifyEnabled false
// 混淆使用文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//dependencies它定義了該module需要依賴的jar缸逃,aar针饥,jcenter庫信息。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:gridlayout-v7:24.2.1'
}
待補(bǔ)充