使用gradle構(gòu)建android應(yīng)用時(shí),你總是需要這樣一個(gè)文件:build.gradle,。你應(yīng)該已經(jīng)看過(guò)這個(gè)文件了,,如果沒(méi)有看過(guò)的話,你現(xiàn)在就可以看一下,,它沒(méi)有多少內(nèi)容,。它的簡(jiǎn)潔性得益于它提供了很多對(duì)設(shè)置和屬性的默認(rèn)值。gradle是基于groovy語(yǔ)言的,,不過(guò)如果只是用它構(gòu)建普通的工程的話,,是可以不去學(xué)groovy的,如果想深入的做一下自定義的構(gòu)建插件,,可以考慮學(xué)一下groovy,,因?yàn)樗腔趈ava的,所以你有java基礎(chǔ)的話,,學(xué)習(xí)不會(huì)很難,。
這篇博客旨讓任何一個(gè)人能看懂a(chǎn)ndroid studio的gradle scripts,主要會(huì)從gradle的簡(jiǎn)單語(yǔ)法,,gradle scripts的腳本結(jié)構(gòu),,每一個(gè)腳本(build.gradle,settings.gradle)的作用,腳本中每一項(xiàng)的意義等方面說(shuō)明gradle scripts.如果想了解如何詳細(xì)配置gradle,比如實(shí)現(xiàn)一個(gè)工程中,,使用同一部分java代碼,,不同的資源res,一次生成多個(gè)不同渠道商的apk,可以看下我的這篇博客,它對(duì)如何配置gradle有較細(xì)致的介紹
1.projects , tasks and action
是的,,工程,,任務(wù)和行為。一個(gè)項(xiàng)目至少要有一個(gè)工程,,一個(gè)工程至少要有一個(gè)任務(wù),,一個(gè)任務(wù)由一些action組成。如果project比較抽象的話,,可以這么理解,,一個(gè)build.gradle對(duì)應(yīng)一個(gè)project,而action就好像java中的方法,,他就是一段代碼的集合,。在工程構(gòu)建的過(guò)程中,gradle會(huì)根據(jù)build.gradle中的配置信息生成相應(yīng)的project和task,。
Project實(shí)質(zhì)上是一系列task的集合,,每一個(gè)task執(zhí)行一些工作,,比如編譯類(lèi)文件,解壓縮文件,,刪除文件等等,。
1.1構(gòu)建過(guò)程
1.1.1初始化階段。首先會(huì)創(chuàng)建一個(gè)Project對(duì)象,,然后執(zhí)行build.gradle配置這個(gè)對(duì)象,。如果一個(gè)工程中有多個(gè)module,那么意味著會(huì)有多個(gè)Project,也就需要多個(gè)build.gradle.
1.1.2配置階段。這個(gè)階段,,配置腳本會(huì)被執(zhí)行,,執(zhí)行的過(guò)程中,新的task會(huì)被創(chuàng)建并且配置給Project對(duì)象,。
1.1.3執(zhí)行階段,。這個(gè)階段,配置階段創(chuàng)建的task會(huì)被執(zhí)行,,執(zhí)行的順序取決于啟動(dòng)腳本時(shí)傳入的參數(shù)和當(dāng)前目錄,。
1.2 task
task標(biāo)示一個(gè)邏輯上的執(zhí)行單元,你可能已經(jīng)用過(guò)它很多次了,,不知道你有沒(méi)有意識(shí)到,。當(dāng)你當(dāng)你重新編譯工程的時(shí)候,會(huì)用到一個(gè)叫做build 的task,,當(dāng)你清理工程的時(shí)候,會(huì)用到一個(gè)叫做clean 的task(后面會(huì)講到),,gradle 已經(jīng)為你準(zhǔn)備了很多的task,可以使用 gradle tasks 來(lái)查看,,比如,這里列出來(lái)一些:
- assemble - Assembles all variants of all applications and secondary packages.
- build - Assembles and tests this project.
- buildDependents - Assembles and tests this project and all projects that depend on it.
- buildNeeded - Assembles and tests this project and all projects it depends on.
- clean - Deletes the build directory.
此外,,你還可以自己聲明一個(gè)task,比如像這樣:
- task haha {
- println "haha"
- }
- task hello << {
- println "hello world"
- }
- task hello {
- doLast{
- println "hello world"