Android構(gòu)建工具——Gradle簡(jiǎn)述

本文出自 “阿敏其人” 簡(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),我弄了張圖横媚,方便以后看起來省事纠炮。

構(gòu)建工具——Gradle.png

五、As項(xiàng)目里面那些Gradle團(tuán)伙

哇灯蝴,萬Gradle穿心恢口,魑魅魍魎,怎么他就這么多穷躁!

Paste_Image.png

來吧來吧耕肩,說道說道:
(為了方便說清楚因妇,我們不嚴(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文件夾
Paste_Image.png
  • 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入門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恩溅,一起剝皮案震驚了整個(gè)濱河市隔箍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脚乡,老刑警劉巖蜒滩,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奶稠,居然都是意外死亡俯艰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門锌订,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竹握,“玉大人,你說我怎么就攤上這事辆飘±卜” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蜈项,是天一觀的道長(zhǎng)芹关。 經(jīng)常有香客問我,道長(zhǎng)紧卒,這世上最難降的妖魔是什么侥衬? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮跑芳,結(jié)果婚禮上轴总,老公的妹妹穿的比我還像新娘。我一直安慰自己博个,他們只是感情好怀樟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坡倔,像睡著了一般漂佩。 火紅的嫁衣襯著肌膚如雪脖含。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天投蝉,我揣著相機(jī)與錄音养葵,去河邊找鬼。 笑死瘩缆,一個(gè)胖子當(dāng)著我的面吹牛关拒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庸娱,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼着绊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了熟尉?” 一聲冷哼從身側(cè)響起归露,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斤儿,沒想到半個(gè)月后剧包,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡往果,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年疆液,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陕贮。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堕油,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肮之,到底是詐尸還是另有隱情掉缺,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布局骤,位于F島的核電站攀圈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏峦甩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一现喳、第九天 我趴在偏房一處隱蔽的房頂上張望凯傲。 院中可真熱鬧,春花似錦嗦篱、人聲如沸冰单。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诫欠。三九已至涵卵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荒叼,已是汗流浹背轿偎。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留被廓,地道東北人坏晦。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嫁乘,于是被迫代替她去往敵國(guó)和親昆婿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容