Gradle系列(二):AndroidStudio的Gradle簡(jiǎn)介

Gradle系列(一):Groovy基礎(chǔ)
Gradle系列(二):AndroidStudio的Gradle簡(jiǎn)介
Gradle系列(三):項(xiàng)目實(shí)踐

前言

在開(kāi)發(fā)中我們接觸的較多的是build.gradle和settings.gradle,我們知道新的moduler要配置在setting.gradle中,新的依賴庫(kù),包括項(xiàng)目的版本等要配置在app目錄下build.gradle,遠(yuǎn)程倉(cāng)庫(kù)以及插件地址要配置在根目錄的build.gradle蛾找。知道這些足夠配置一個(gè)基本項(xiàng)目了失仁,但是我們常有下面幾個(gè)疑問(wèn):

  • Gradle是什么雷激? AndroidStudio中的GradlePlugin又是什么璧疗?
  • 還有g(shù)radlew.bat是干嘛的皆的,gradle在AndroidStudio中如何工作的悲敷?

第一個(gè)問(wèn)題究恤,我們需要了解關(guān)于gradle的三點(diǎn):

  • 構(gòu)建工具包括 make,Ant,Maven,Lvy和現(xiàn)在的Gradle衣陶,差不多是一步步進(jìn)化而來(lái)柒爵,前面幾種都是基于XML,不擅長(zhǎng)if這類邏輯判斷义锥,而Gradle基于Groovy有自己的語(yǔ)法探遵。

  • Gradle與Android本身沒(méi)有任何關(guān)系窟赏,Gradle主要用于Java項(xiàng)目,不過(guò)還支持Android箱季,C涯穷,C++。Gradle官方文檔:https://docs.gradle.org/current/release-notes

  • Google選用Gradle作為AS的構(gòu)建工具藏雏,集成了一套插件叫Android Gradle Plugin拷况,Gradle Plugin官方文檔:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Why-Gradle-

第二個(gè)問(wèn)題,在此新建項(xiàng)目一探究竟

Android Studio中Gradle結(jié)構(gòu)

在Android Studio新建項(xiàng)目掘殴,AS會(huì)自動(dòng)下載安裝Gradle并且生成下面這樣的項(xiàng)目結(jié)構(gòu):

Paste_Image.png

先看2號(hào)和4號(hào)赚瘦,這里有個(gè)gradle wrapper的東西意為gralde包裝,是Android studio特有的奏寨,因?yàn)槲覀冊(cè)诒镜氐捻?xiàng)目可能用了不同的Gradle版本(比如項(xiàng)目A用Gradle1.0起意,項(xiàng)目B用Gradle2.0),那么我們只安裝Gradle1.0或者Gradle2.0都是不行的病瞳,于是gradle wrapper可以來(lái)解決這個(gè)問(wèn)題揽咕,不同的項(xiàng)目允許配置不同的Gradle版本,但是每個(gè)版本AS都會(huì)幫我們下載到本地(Windows默認(rèn)在Administator文件夾)套菜,看下:

Paste_Image.png

所以相當(dāng)于在Android studio所有操作就是基于GradleWrapper亲善,打開(kāi)AS自帶的Terminal查看當(dāng)前項(xiàng)目的Gradle版本:


Paste_Image.png

Gradle的工作流程

在上面1,3,5號(hào)對(duì)應(yīng)三個(gè).gradle文件,在每個(gè)gradle開(kāi)始處都加上Log打印逗柴,運(yùn)行項(xiàng)目蛹头,看下這三處.gradle文件的執(zhí)行順序:

Paste_Image.png
  1. 先進(jìn)入Settings.gradle初始化,弄清整個(gè)項(xiàng)目有多少project,可以在這對(duì)gradle添加額外屬性渣蜗,那么在buiuld.gradle中就能拿到屠尊。

  2. 進(jìn)入跟目錄的build.gradle,內(nèi)容主要包含了兩個(gè)方面:一個(gè)是聲明倉(cāng)庫(kù)的源袍睡,這里可以看到是指明的jcenter(), 之前版本則是mavenCentral(), jcenter可以理解成是一個(gè)新的中央遠(yuǎn)程倉(cāng)庫(kù)知染,兼容maven中心倉(cāng)庫(kù),而且性能更優(yōu)斑胜。另一個(gè)是聲明了android gradle plugin的版本,android studio 1.0正式版必須要求支持gradle plugin 1.0的版本嫌吠。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

3.進(jìn)入app的build.gradle止潘,這個(gè)gradle分為application 和library兩個(gè)類型,區(qū)分是依據(jù)第一句的apply配置:

apply plugin: 'com.android.application'
//apply plugin: 'com.android.library'
  • 注釋:apply是Project類下的一個(gè)方法辫诅,接受Map類型參數(shù)凭戴,key是"plugin"代表類型,value是"com.android.application"炕矮,代表android gradle插件版本就是上面配置的 classpath 'com.android.tools.build:gradle:2.2.0'
PluginAware.apply(java.util.Map)

gradle構(gòu)建基本知識(shí)

AndroidStudio以gradle為構(gòu)建工具么夫,我們只需輕點(diǎn)一下run,app就自動(dòng)打包生成了肤视,這個(gè)流程是什么樣的档痪?下面先看幾個(gè)基本名詞:

  • buildTypes{}
    這個(gè)方法參數(shù)是一個(gè)Closure,gradle默認(rèn)提供了debug和release兩種編譯類型邢滑,具體的執(zhí)行(包括編譯腐螟,打包,clean等)是由一個(gè)個(gè)task完成困后,這些task完全由Android Gradle Plugin決定乐纸,比如這個(gè)GradleDemo的所有Task:可以看出build這個(gè)目錄下有assembleDebug和assembleRelease兩個(gè)task(在buildTypes中增加自定義type,這個(gè)build下就會(huì)生成相應(yīng)的task)

Paste_Image.png

打開(kāi)自帶的Terminal摇予,用gradle執(zhí)行task的命令格式為 :gradlew + taskName
gradlew clean:嘗試執(zhí)行其中的clean這個(gè)task汽绢,可以看出整個(gè)build文件夾都被清空了
gradlew assembleDebug :編譯一個(gè)debug版本,在output生成了debug apk:

Paste_Image.png

在buildType中自定義一個(gè)type:

Paste_Image.png

編譯dml這個(gè)版本:gradlew assembleDml侧戴,在output中生成了app-dml-unsigned.apk(這個(gè)apk和debug release用的同樣的代碼宁昭,只不過(guò)是未簽名的本質(zhì)上和debug apk一樣):

Paste_Image.png
  • productFlavors

用于多渠道打包,例如新增proA和proB兩個(gè)product:

    productFlavors{
        proA{}
        proB{}
    }

執(zhí)行編譯所有的release包:

Paste_Image.png

看下輸出:

Paste_Image.png

也可以利用productName編譯特定的產(chǎn)品apk救鲤。

  • dependencies

技巧:可以通過(guò)buildType或者productFlavors來(lái)差異化編譯依賴庫(kù):

debugCompile(name: "$libName", ext: 'aar') //只在debug模式下才會(huì)編譯

由此可見(jiàn)久窟,我們輕點(diǎn)一下run,背后其實(shí)就是執(zhí)行了gradle腳本:assembleDebug本缠,生成未簽名的apk斥扛。而編譯簽名包,也就是執(zhí)行了有簽名文件gradle腳本:assembleRelease而已

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市稀颁,隨后出現(xiàn)的幾起案子芬失,更是在濱河造成了極大的恐慌,老刑警劉巖匾灶,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棱烂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阶女,警方通過(guò)查閱死者的電腦和手機(jī)颊糜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)秃踩,“玉大人衬鱼,你說(shuō)我怎么就攤上這事°狙睿” “怎么了鸟赫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)消别。 經(jīng)常有香客問(wèn)我抛蚤,道長(zhǎng),這世上最難降的妖魔是什么寻狂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任岁经,我火速辦了婚禮,結(jié)果婚禮上荆虱,老公的妹妹穿的比我還像新娘蒿偎。我一直安慰自己,他們只是感情好怀读,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布诉位。 她就那樣靜靜地躺著,像睡著了一般菜枷。 火紅的嫁衣襯著肌膚如雪苍糠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天啤誊,我揣著相機(jī)與錄音岳瞭,去河邊找鬼。 笑死蚊锹,一個(gè)胖子當(dāng)著我的面吹牛瞳筏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牡昆,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼姚炕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起柱宦,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤些椒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后掸刊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體免糕,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年忧侧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了石窑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苍柏,死狀恐怖尼斧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情试吁,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布楼咳,位于F島的核電站熄捍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏母怜。R本人自食惡果不足惜余耽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苹熏。 院中可真熱鬧碟贾,春花似錦、人聲如沸轨域。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)干发。三九已至朱巨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枉长,已是汗流浹背冀续。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留必峰,地道東北人洪唐。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像吼蚁,于是被迫代替她去往敵國(guó)和親凭需。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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