什么是Gradle
Gradle是一個基于Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基于Groovy的特定領域語言來聲明項目設置,而不是傳統(tǒng)的XML。當前其支持的語言限于Java、Groovy和Scala,計劃未來將支持更多的語言。——維基百科
以下簡要介紹幾個相關概念:
1. 建構工具做的工作包括:編譯源代碼、運行測試、拷貝Class文件到目標目錄、簽名、打包、依賴管理等。目的是讓開發(fā)人員更加專注于代碼的編寫。
2. Groovy:是Java平臺上設計的面向對象編程語言。這門動態(tài)語言擁有類似Python、Ruby和Smalltalk中的一些特性,可以作為Java平臺的腳本語言使用。Groovy的語法與Java非常相似。
相對于Ant和Maven來說,Gradle可以算是新一代的自動化構建工具,而且Gradle在基于它們的基礎上優(yōu)化的同時還可以兼容這兩者。
Gradle與Android Studio
Android Studio(以下采用縮寫AS)采用的構建工具即Gradle,Gradle可以輔助我們簡化很多復雜的操作流程如:依賴管理、多渠道打包、簽名信息配置、批量修改生成的apk文件名等,因此學習Gradle顯得更為重要。當然,以下的介紹的Gradle相關特性和使用都是以AS為例的。
Android Studio工程中與Gradle相關的目錄
使用Android Studio新建一個工程之后,其目錄結構是這樣的(需要強調一下,以下的目錄結構以及文件內容都只是新建項目時默認的樣子,更高級的用法以及特點將會在后續(xù)的章節(jié)提及):
├── 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可執(zhí)行文件
├── gradlew.bat ·················#windows下的gradle wrapper可執(zhí)行文件
├── 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()
}
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- app/build.gradle #module構建文件
模塊(module)中的構建文件,對當前模塊生效。開發(fā)過程中最需要注重的一個文件,應用的相關特性都在這里進行配置。
//表示該module是一個應用(application)模塊,應用了com.android.application插件;
//(如果是一個android library,那么這里的是apply plugin:'com.android.library')
apply plugin: 'com.android.application'
//安卓項目相關的配置,后續(xù)章節(jié)將進行更為詳細的介紹
android {
//編譯項目所用的SDK版本(即編譯時的API版本),com.android.support的版本需要與這個一致
//建議(總是)采用最新版本
compileSdkVersion 23
//構建工具版本
buildToolsVersion "23.0.3"
defaultConfig {
//安裝時,依據該ID區(qū)分是否為同一個應用
applicationId "com.wiky.supporttest"
//最低支持的系統(tǒng)版本(必須>=所有依賴庫所支持的最低版本)
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'
}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
PS:關于compileSdkVersion 和 buildToolsVersion這兩個版本,在我們導入一些開源的項目時,也是需要關注的。最好在導入項目之前,找到對應的build.gradle文件,然后將其版本號改為當前可正常使用的版本號(即你本地能夠順利運行的項目中對應的版本號)。這樣可以很大程度上避免導入項目時的“卡死”(構建中…)現象。
- settings.gradle #工程配置
這個文件是全局的項目配置文件,里面主要聲明一些需要加入 gradle 的 module,即告訴gradle項目中有哪些模塊(module)需要處理,文件內容:
//如果有多個module的話,格式如:include ':app', ':otherModule',.....
include ':app'- 1
- 2
gradle.properties #gradle相關的全局屬性設置
在google開源的[iosched][1]項目中,可以看到他們利用了該文件配置了一些builde.gradle中需要用到的常(變)量, 如com.android.support. 的版本號以及簽名信息相關的配置。利用該文件進行統(tǒng)一依賴管理可參見:[Gradle統(tǒng)一依賴管理][2]gradle.wrapper (Gradle Wrapper )
它允許你的機器在不需要安裝運行的情況下就能運行Gradle腳本(我們在下載AS后可以直接開始使用gradle、開發(fā)項目,而無需另外下載及安裝gradle,主要歸功于這一特性),而且更重要的是它確保了build腳本運行在指定版本的Gradle。它會從中央倉庫中自動下載Gradle,解壓到你的文件系統(tǒng),然后用來build。



