本文出自 “阿敏其人” 簡(jiǎn)書博客茵休,轉(zhuǎn)載或引用請(qǐng)注明出處薪棒。
說在前面
最直觀的手蝎,用Gradle作為構(gòu)建工具哪里爽得最明顯?
依賴?yán)锩嬉恍写a 依賴+管理 庫(kù)俐芯。而不是Eclipse時(shí)代復(fù)制jar包棵介,再手動(dòng)添加。
compile 'com.android.support:appcompat-v7:23.4.0'
依賴吧史?很明顯啦邮辽。
管理?其實(shí)管理就是改改庫(kù)的版本號(hào)贸营,但是比替換jar來得方便多了吧吨述。
一、什么是構(gòu)建工具钞脂?
構(gòu)建工具揣云,幫我們構(gòu)建項(xiàng)目的工具。
構(gòu)建工具的做的事情一般是 —— 編譯、運(yùn)行、打包寺鸥、簽名 和 依賴管理蕴茴。
二、構(gòu)建工具有哪些图焰?
傳統(tǒng)的構(gòu)建工具有:Make、Ant、Maven和Ivy等矿咕。
對(duì)于安卓:
Eclipse時(shí)代的構(gòu)建工具是:ADT
Android Studio時(shí)代的構(gòu)建工具是:Gradle
三 、什么是Gradle
首先Gradle是構(gòu)建工具。
雖然As把Gradle作為自身的構(gòu)建工具碳柱,但是Gradle是獨(dú)立的項(xiàng)目雌团,跟谷歌不存在從屬關(guān)系。
簡(jiǎn)單來說有以下幾點(diǎn):
1士聪、獨(dú)立項(xiàng)目锦援,和Google無關(guān)
2、Grdle基于Groovy剥悟。(Maven灵寺、Ant基于xml)
3、Gradle兼容Maven区岗、Ant
4略板、Gradle 的推出主要以 Java 應(yīng)用為主,當(dāng)然還支持 Android慈缔、C叮称、C++等。
四藐鹤、Gradle和As的合作
As怎么依賴Gradle讓Gradle作為自身的構(gòu)建工具呢瓤檐?Google開發(fā)一個(gè)Gradle插件。
As項(xiàng)目依賴了這個(gè)插件娱节,就相當(dāng)于讓Gradle作為了自身的的構(gòu)建工具挠蛉。
現(xiàn)在比如我們新建一個(gè)As項(xiàng)目,打來項(xiàng)目的根目錄的gradle.build文件肄满。是類似如下代碼:
// 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:2.1.2'
// 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
}
關(guān)鍵是
classpath 'com.android.tools.build:gradle:2.1.2'
這句代碼谴古,讓As成功依賴Gradle插件。
2.1.2代表的是谷歌的Gradle插件的版本號(hào)稠歉,而不是Gradle的版本號(hào)掰担。
上面的一、二怒炸、三带饱、四的4大點(diǎn),我弄了張圖横媚,方便以后看起來省事纠炮。
五、As項(xiàng)目里面那些Gradle團(tuán)伙
哇灯蝴,萬Gradle穿心恢口,魑魅魍魎,怎么他就這么多穷躁!
來吧來吧耕肩,說道說道:
(為了方便說清楚因妇,我們不嚴(yán)格按照上圖的順序來)
從直觀上看,我們看到項(xiàng)目有一個(gè).gradle文件夾和一個(gè)gradle文件夾猿诸。
.gradle文件夾
- .gradle文件夾
.gradle文件夾 是gradle 運(yùn)行以后生成的緩存文件夾婚被。所以有時(shí)從網(wǎng)絡(luò)上下載的as項(xiàng)目沒有這個(gè)文件夾并不奇怪。
(個(gè)用梳虽,轉(zhuǎn)用可刪之)
gradle文件夾
- gradle文件夾
gradle-wrapper.jar
jar就jar吧gradle-wrapper.properties
通過配置其中的gradle-wrapper.properties 中的distributionUrl 可以給你的項(xiàng)目指定需要使用的gradle 版本址芯。
當(dāng)前打開如下
#Mon Dec 28 10:00:20 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
作為項(xiàng)目的module里面的build.gradle文件
- /app/build.gradle
每一個(gè)mudole里面都有一個(gè) /?module/build.gradle
這個(gè)很可以細(xì)說
// com.android.application 說明了這是一個(gè)項(xiàng)目
// 如果是作為庫(kù)的module 是 apply plugin: 'com.android.library'
apply plugin: 'com.android.application'
// android 相關(guān) 構(gòu)建參數(shù)
android {
compileSdkVersion 23 // 編譯使用SDK版本
buildToolsVersion "23.0.3" // 編譯工具的版本 buildTools
defaultConfig {
applicationId "com.am.gradletest" // 用于標(biāo)識(shí)的包名
minSdkVersion 14 // sdk最低支持版本
targetSdkVersion 23 // 目標(biāo)SDK版本,如果目標(biāo)設(shè)備的API版本正好等于此數(shù)值窜觉,就不會(huì)為此程序開啟兼容性檢查判斷的工作
versionCode 1 //版本號(hào)
versionName "1.0"
}
// 編譯類型
// 下面 聲明了 debug 和 release 兩種類型谷炸,名字隨意
buildTypes {
// release 發(fā)布 ,release里面是關(guān)于發(fā)布的配置
release {
minifyEnabled false // minifyEnabled 是否開啟混淆禀挫,false不開啟
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 混淆文件
}
// debug(不作為發(fā)布版)時(shí)候的配置旬陡,這個(gè)debug的代碼塊默認(rèn)不帶,這里是手動(dòng)加的
debug{
}
}
}
// 依賴 三種依賴语婴,第一種是本地的jar描孟,第二種是本地的module庫(kù),第三種是利用gradle遠(yuǎn)程的依賴管理
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar']) // 這句代碼會(huì)自動(dòng)依賴本地的所有jar砰左,就不要逐個(gè)依賴了
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
}
根目錄的全局 build.gradle
默認(rèn)有三個(gè)“節(jié)點(diǎn)”匿醒,
buildscript
allprojects
task clean
local.properties
- local.properties
Android studio 自動(dòng)生成,用于配置本地的 SDK菜职、NDK 路徑青抛。
因?yàn)檫@是針對(duì)設(shè)備的設(shè)置,不同的設(shè)備SDK路徑不一定一樣。
VCS(版本控制)的時(shí)候應(yīng)該忽略掉這個(gè)文件酬核。
gradle.properties
gradle.properties 文件,是對(duì)gradle的配置适室。
有時(shí)候會(huì)gradle坐優(yōu)化就會(huì)在這里面做一些修改嫡意。
gradlew文件 和 gradlw.bat 文件
簡(jiǎn)單來說,這兩個(gè)文件就是讓玲玲可以在不同的平臺(tái)執(zhí)行一樣的命令的捣辆。
gradlew和gradlew.bat這分別是linux下的shell腳本和windows下的批處理文件蔬螟,它們的作用是根據(jù)gradle-wrapper.properties文件中的distributionUrl下載對(duì)應(yīng)的gradle版本。
這樣就可以保證在不同的環(huán)境下構(gòu)建時(shí)都是使用的統(tǒng)一版本的gradle汽畴,即使該環(huán)境沒有安裝gradle也可以旧巾,因?yàn)間radle wrapper會(huì)自動(dòng)下載對(duì)應(yīng)的gradle版本。gradlew的用法跟gradle一模一樣忍些,比如執(zhí)行構(gòu)建gradle build命令鲁猩,你可以用gradlew build。gradlew即gradle wrapper的縮寫罢坝。
廓握,比如查看版本,./gradlew -v (win用戶直接輸入 gradlew -v)
請(qǐng)問android studio創(chuàng)建的工程目錄下的gradlew文件有什么作用?
gradlew相關(guān)命令:
- assemble : 針對(duì)某個(gè)版本創(chuàng)建一個(gè)apk
- clean : 刪除所有的構(gòu)建任務(wù)(包含已經(jīng)構(gòu)建號(hào)的apk文件)
- check : 執(zhí)行Lint檢查隙券,如果Lint檢查到錯(cuò)誤男应,則停止執(zhí)行腳本
- build : 同時(shí)執(zhí)行assemble,check命令
- connectedCheck : 執(zhí)行測(cè)試任務(wù)
- deviceCheck : 執(zhí)行在遠(yuǎn)程設(shè)備上的測(cè)試
- installDebug : 安裝debug版本
- installRelease : 安裝release版本
- uninstallDebug : 卸載debug版本
- uninstallRelease : 卸載release版本
- tasks :查看當(dāng)前可構(gòu)建的所有task
- -v : 查看當(dāng)前的gradle版本
settings.gradle
用來配置多模塊的
比如當(dāng)前工程打開該文件:
include ':app'
比如你的項(xiàng)目有兩個(gè)模塊module-a,module-b,那么你就需要在這個(gè)文件中進(jìn)行配置娱仔,格式如下:
include ':module-a',':module-b'
大概就到這里沐飘,深入學(xué)習(xí)還可以研究主工程build.gradle的配置,還有g(shù)radlew的命令牲迫。這花時(shí)間需實(shí)際需要改善薪铜。
本篇完。
參考:
給 Android 初學(xué)者的 Gradle 知識(shí)普及
Android 開發(fā)你需要了解的 Gradle 配置
gradle入門