Gradle學(xué)習(xí)筆記(二)--一個(gè)android工程的gradle描述

前言

看了大多數(shù)寫Gradle的文章猬仁,一開始就先講解各種概念遥昧,最后被繞的云里霧里踩验,心里默默感慨道:講的真tm的好,但是我還是不懂汰瘫。
所以,我這里想先從全局上給大家來一個(gè)通俗的解釋擂煞,盡量簡潔明了混弥,而后再各個(gè)深入進(jìn)去。

闡明主題

Gradle作為一個(gè)構(gòu)建工具对省,主要功能是打包用蝗拿。沒錯(cuò),對(duì)于android工程來講蒿涎,就是最后產(chǎn)出一個(gè)apk或者aar哀托,中間你可以插入你自定義的一些操作,比如改字節(jié)碼劳秋,改資源名稱之類的仓手。
所以胖齐,大致的過程需要說一下:

1. 首先,讀取工程根目錄下settings.gradle文件俗或,創(chuàng)建Settings 對(duì)象市怎,獲取 include 的 Projects
2. 根據(jù)獲取的projects ,創(chuàng)建Project對(duì)象實(shí)例層次,單module就是單實(shí)例,多module就是多實(shí)例辛慰。
3. 然后會(huì)通過讀取每個(gè)module下的build.gradle文件來評(píng)估這個(gè)Project区匠,以及Project之間的先后順序。
4. 最后會(huì)順序執(zhí)行這些project的build.gradle 的task帅腌,生成目標(biāo)文件apk或aar驰弄。

注意,每個(gè)build.gradle都對(duì)應(yīng)一個(gè)Project對(duì)象實(shí)例

一個(gè)例子

我們新建一個(gè)空白工程速客,只有一個(gè)主工程module戚篙,多module類似。


一個(gè)空白工程

可以看到有三個(gè).gradle文件溺职。settings.gradle,兩個(gè)build.gradle岔擂,不過一個(gè)是application的,一個(gè)是module的浪耘。


settings.gradle

include ':app'

很簡單乱灵,就執(zhí)行了一個(gè)include方法,當(dāng)然七冲,多module的話痛倚,只需在后面加 ,':module1'類似即可澜躺,當(dāng)你加入一個(gè)新的module以后蝉稳,一個(gè)ProjectDescriptor
便會(huì)被創(chuàng)建出來,然后你就可以用這個(gè)對(duì)象去改某個(gè)module的特定屬性了掘鄙,這里大部分人應(yīng)該沒怎么注意耘戚,看不懂也沒關(guān)系,用到了就會(huì)懂了操漠。
注意毕莱,我這里說執(zhí)行了,為什么這么說呢颅夺?看這里: include確實(shí)是 Settings的一個(gè)方法朋截,要多看api文檔,很多問題都會(huì)迎刃而解吧黄。


build.gradle(Application)

// Top-level build file where you can add configuration options common to all sub-projects/modules.
看上面就應(yīng)該清楚和module的區(qū)別了吧
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'

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

allprojects {
    repositories {
        jcenter() //jcenter倉庫
    }
}
這里是繼承了Delete基類的 一個(gè)task部服,作用就是刪除 rootProject.buildDir下的文件。
辣么問題來了拗慨,rootProject是什么鬼廓八?為什么會(huì)有這個(gè)對(duì)象奉芦?
task clean(type: Delete) {
    delete rootProject.buildDir
}

這里要介紹Build script structureBS是一個(gè)以閉包為參數(shù)的方法調(diào)用剧蹂,對(duì)就是這樣声功。在x{y{}}中,這里的x{}和x{}里的y{}都是BS宠叼。
從下圖可以看出先巴,每一個(gè)BS都一一映射到一個(gè)類。BS中屬性就對(duì)應(yīng)于這些類的成員變量冒冬。我們可以參照官方文檔來了解我們不知道的一些細(xì)節(jié)伸蚯,也能為我們以后自己寫插件做鋪墊。

官方文檔

build.gradle(module)
相信大家對(duì)這個(gè)就比較熟悉了简烤,我們就先提出幾個(gè)問題吧:apply 是什么鬼剂邮?為什么這樣就把a(bǔ)ndroid主module用到的BS全部都包含進(jìn)去了?android{}這個(gè)東西是怎么來的横侦?

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "com.shang.myapplication"
        minSdkVersion 10
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.1'
    testCompile 'junit:junit:4.12'
}

Ctrl+鼠標(biāo)放到apply可以看到下圖:

PluginAware

前面我們講個(gè)每個(gè)build.gradle文件都對(duì)應(yīng)一個(gè)Project對(duì)象挥萌,辣么很顯然這個(gè)apply就應(yīng)該是這個(gè)類的方法,我就毫不猶豫的打開了Project類
介紹枉侧,Project 實(shí)現(xiàn)了PluginAware接口引瀑,全局搜了下apply,豁然明了:apply to ,apply plugin ,apply from棵逊。apply plugin 對(duì)應(yīng)的是插件的id,而這個(gè)插件里則定義了很多個(gè)屬性银酗,閉包辆影,來提供給我們做個(gè)性化定制使用。

apply

寫到這里黍特,對(duì)一個(gè)簡單工程的gradle分析大致結(jié)束了蛙讥,其實(shí)很多東西,網(wǎng)上的人云亦云灭衷,照抄照搬次慢,看來看去,還不如直接對(duì)照官方文檔來得方便翔曲,希望能夠多多閱讀api文檔迫像,與大家共勉。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瞳遍,一起剝皮案震驚了整個(gè)濱河市闻妓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掠械,老刑警劉巖由缆,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件注祖,死亡現(xiàn)場離奇詭異,居然都是意外死亡均唉,警方通過查閱死者的電腦和手機(jī)是晨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舔箭,“玉大人罩缴,你說我怎么就攤上這事∠尴樱” “怎么了靴庆?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長怒医。 經(jīng)常有香客問我炉抒,道長,這世上最難降的妖魔是什么稚叹? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任焰薄,我火速辦了婚禮,結(jié)果婚禮上扒袖,老公的妹妹穿的比我還像新娘塞茅。我一直安慰自己,他們只是感情好季率,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布野瘦。 她就那樣靜靜地躺著,像睡著了一般飒泻。 火紅的嫁衣襯著肌膚如雪鞭光。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天泞遗,我揣著相機(jī)與錄音惰许,去河邊找鬼。 笑死史辙,一個(gè)胖子當(dāng)著我的面吹牛汹买,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聊倔,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼晦毙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耙蔑?” 一聲冷哼從身側(cè)響起结序,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纵潦,沒想到半個(gè)月后徐鹤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垃环,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年返敬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遂庄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劲赠,死狀恐怖涛目,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凛澎,我是刑警寧澤霹肝,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站塑煎,受9級(jí)特大地震影響沫换,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜最铁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一讯赏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冷尉,春花似錦漱挎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雾棺,卻和暖如春膊夹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垢村。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工割疾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚎卫,地道東北人嘉栓。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像拓诸,于是被迫代替她去往敵國和親侵佃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • 參考資料:http://gold.xitu.io/post/580c85768ac247005b5472f9htt...
    zhaoyubetter閱讀 11,003評(píng)論 0 6
  • Gradle簡介 Gradle是一個(gè)構(gòu)建工具奠支,同時(shí)它也是一個(gè)編程框架馋辈。 當(dāng)你把Gradle當(dāng)構(gòu)建工具看的時(shí)候,我們...
    Rangethan閱讀 2,322評(píng)論 1 8
  • 前言 從2013年Google推出Android Studio(后面以AS簡稱)開始倍谜,到現(xiàn)在已經(jīng)歷經(jīng)3年迈螟,版本也發(fā)...
    dfqin閱讀 1,847評(píng)論 1 3
  • “天將今夜月叉抡,一遍洗寰瀛〈鸷粒”中秋前后已迎來澳門最舒服的季節(jié)褥民,老天用如水的月色,洗滌塵世的一切洗搂,這座適逢國際煙花比賽...
    禪1閱讀 664評(píng)論 2 6
  • 從去年開始消返,我就一直在某個(gè)組織做義工。直到今年的4月份為止耘拇,我得到了一個(gè)國際義工的機(jī)會(huì)撵颊。原本4月份已經(jīng)和組織計(jì)劃好...
    壹次閱讀 477評(píng)論 0 0