Android之Gradle<第三篇>:Gradle構建腳本基礎

當新建一個Android Studio項目后岂昭,會自動生成一些Gradle配置文件墓拜,了解Gradle構建腳本是學習Gradle的必要知識之一赃磨。

[Settings 文件]

圖片.png

上圖是Android工程的的目錄結構,在根目錄下有一個非常重要的文件settings.gradle初婆,這個文件稱為設置文件机打,設置文件大多數(shù)的作用都是為了配置子工程矫户,也就是Module。

Android工程支持多Module残邀,如果項目中存在app皆辽、app1、app2芥挣、app3驱闷、app4、app5這幾個Module九秀,那么需要在設置文件中配置這幾個Module遗嗽,配置方式可以是:

圖片.png

也可以這么配置

圖片.png

如果某個Module用不到,可以不要配置這個Module鼓蜒。

接下來,看一下以下項目結構

圖片.png

默認情況下征字,Module文件夾的位置都在項目的根目錄都弹,那么,有沒有辦法調(diào)整Module在項目中的路徑呢匙姜?

答案是:有的

為了優(yōu)化工程結構畅厢,我們會將一些業(yè)務層的Module單放入一個文件夾中,在項目的根目錄下新建一個名稱為business的文件夾氮昧,將app1框杜、app2app3袖肥、app4咪辱、app5放入到business文件夾中,在設置文件中椎组,重新執(zhí)行Module的目錄油狂,配置代碼如下:

include ':app'
include ':app1'
project(':app1').projectDir = new File(rootDir, 'business/app1')
include ':app2'
project(':app2').projectDir = new File(rootDir, 'business/app2')
include ':app3'
project(':app3').projectDir = new File(rootDir, 'business/app3')
include ':app4'
project(':app4').projectDir = new File(rootDir, 'business/app4')
include ':app5'
project(':app5').projectDir = new File(rootDir, 'business/app5')

當然,如果不指定Module的路徑,那么默認就是根目錄专筷。

[Build文件]

我們都知道弱贼,使用工具創(chuàng)建一個Android工程,會默認構建一個項目磷蛹,那么構建項目的入口在哪里呢吮旅?

在項目的根目錄下找到文件build.gradle,這個一個工程的Build文件味咳,這個文件是構建項目的起始點鸟辅。

先來看一下Build文件的代碼

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

buildscript: 主要功能是下載并引用一些插件

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

dependencies代碼塊中主要放置一些項目必要的插件,當新建項目時莺葫,必然會默認加載一個gradle插件

classpath "com.android.tools.build:gradle:4.0.0"

當前gradle的插件版本是4.0.0匪凉。

當然,也可以自定義一個插件捺檬,將自定義的插件放入dependencies代碼塊中加載再层。

repositories代碼塊決定了插件下載的遠程倉庫,先從google倉庫中下載堡纬,如果google倉庫中找不到對應的插件聂受,那么會在jcenter倉庫中尋找對應的插件。

allprojects: 主要功能是下載所有Module下的依賴

allprojects {
    repositories {
        google()
        jcenter()
    }
}

allprojects對應著所有Module下的依賴烤镐,repositories代碼塊指定了那些依賴下載的地址蛋济。

這里,有一個閉包的概念炮叶,所有碗旅,如果在閉包上添加小括號是沒有語法錯誤的,代碼如下:

buildscript ({
    repositories ({
        google()
        jcenter()
    })
    dependencies ({
        classpath "com.android.tools.build:gradle:4.0.0"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    })
})

allprojects ({
    repositories ({
        google()
        jcenter()
    })
})

構建一個Android工程镜悉,會執(zhí)行大量的任務(task)祟辟,出了一些自帶的task之外,還以自定義協(xié)議task侣肄,可以將自定義task放在Build文件來執(zhí)行旧困,代碼如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
  //...
}

allprojects {
  //...
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

task test1{
    println 'test1'
}

task test2{
    println 'test2'
}

task test3{
    println 'test3'
}

task test4{
    println 'test4'
}

task test5{
    println 'test5'
}

[Projects和Tasks]

學習Gradle必須要理清楚Projects和tasks的概念,我們都知道稼锅,一個Android項目吼具,由若干個Module組成,這些Module就是Projects矩距,然而拗盒,每個Project的構建都是由多個Task來構建的,Task是一個命令剩晴,或者說是一個操作锣咒,由于一個Project是由多個Task來構建的侵状,所以可以理解為多個Task就是一個Project

[創(chuàng)建一個新的任務]

方法一:

task test{
    doLast {
        println 'doLast'
    }

    doFirst {
        println 'doFirst'
    }
}

方法二:

tasks.create('test'){
    doLast {
        println 'doLast'
    }

    doFirst {
        println 'doFirst'
    }
}

補充:doFirst優(yōu)先被執(zhí)行毅整,doLast最后被執(zhí)行趣兄。

[任務依賴]

task test1{
    println 'test1'
}

task test2(dependsOn: test1){
    println 'test2'
}

以上代碼的意思是:test2依賴于test1,所以在執(zhí)行test2之前必然會執(zhí)行test1悼嫉。

[自定義屬性]

定義一個屬性:

ext.aa = 1

定義多個屬性:

ext{
    age = 18
    name = 'zhangsan'
}

還可以使用sourceSets定義屬性艇潭,代碼如下:

sourceSets {
    main{
        resourcesDir = 'main/res'
    }
    test{
        resourcesDir = 'test/res'
    }
}

task testC{
    sourceSets.each {
        println "${it.name}的resourcesDir是:${it.resourcesDir}"
    }
}

[腳本即代碼,代碼也是腳本]

在Build文件中可以使用Groovy語言戏蔑,比如使用Groovy語言定義一個方法蹋凝,代碼如下:

def function() {
    def sum = 1+2
    println sum
}

task testD{
    function()
}

[本章完...]

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市总棵,隨后出現(xiàn)的幾起案子鳍寂,更是在濱河造成了極大的恐慌,老刑警劉巖情龄,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迄汛,死亡現(xiàn)場離奇詭異,居然都是意外死亡骤视,警方通過查閱死者的電腦和手機鞍爱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來专酗,“玉大人睹逃,你說我怎么就攤上這事〉豢希” “怎么了沉填?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長躬柬。 經(jīng)常有香客問我拜轨,道長,這世上最難降的妖魔是什么允青? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮卵沉,結果婚禮上颠锉,老公的妹妹穿的比我還像新娘。我一直安慰自己史汗,他們只是感情好琼掠,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著停撞,像睡著了一般瓷蛙。 火紅的嫁衣襯著肌膚如雪悼瓮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天艰猬,我揣著相機與錄音横堡,去河邊找鬼。 笑死冠桃,一個胖子當著我的面吹牛命贴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播食听,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼胸蛛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了樱报?” 一聲冷哼從身側響起葬项,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迹蛤,沒想到半個月后民珍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡笤受,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年穷缤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箩兽。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡津肛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汗贫,到底是詐尸還是另有隱情身坐,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布落包,位于F島的核電站部蛇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏咐蝇。R本人自食惡果不足惜涯鲁,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望有序。 院中可真熱鬧抹腿,春花似錦、人聲如沸旭寿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盅称。三九已至肩祥,卻和暖如春后室,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背混狠。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工岸霹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人檀蹋。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓松申,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俯逾。 傳聞我的和親對象是個殘疾皇子贸桶,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355