淺談Gradle(一)

什么是Gradle滤奈,我打開(kāi)idea哀蘑,在設(shè)置里面會(huì)有一個(gè)選項(xiàng)是build tools厘贼,這個(gè)選項(xiàng)里有3個(gè)選項(xiàng)界酒,ant,maven和gradle嘴秸。
所以gradle就是build tools毁欣,簡(jiǎn)稱構(gòu)建工具。ant岳掐,maven和gradle就是java中常用的構(gòu)建工具凭疮。

那什么是構(gòu)建工具呢,按照我的理解串述,構(gòu)建工具就是把代碼變成應(yīng)用的工具执解,比如gradle能把項(xiàng)目代碼變成apk文件。這也就是應(yīng)用和網(wǎng)頁(yè)其中一個(gè)不同的地方纲酗。

一.Product與task

第一次看到Android中默認(rèn)配置的gradle我也看不懂衰腌,就完全不懂寫的是什么,感覺(jué)亂亂的耕姊,深入理解后才看懂一些皮毛桶唐。

一個(gè)Android項(xiàng)目如果要編譯的話,至少要有一個(gè)模塊的build.gradle茉兰,而每個(gè)模塊的build.gradle就是Gradle 的一個(gè)Project尤泽,默認(rèn)情況下我門有個(gè)app的build.gradle,這個(gè)就是一個(gè)Project规脸。

一個(gè)Project里頭包含多個(gè)task(任務(wù))坯约,一個(gè)task又包含多個(gè)action。所以Gradle 抽象來(lái)說(shuō)是由至少一個(gè)Project組成莫鸭,Project由多個(gè)task組成闹丐,task由多個(gè)action組成。還有一點(diǎn)就是這個(gè)Project具體執(zhí)行的task是由具體的Plugin決定的被因。比如我們app的build.gradle最上方會(huì)寫著apply plugin: 'com.android.application'

如果你用命令gradlew tasks tools 卿拴,你就可以查看全部task,mac記得在前面加.\

有個(gè)我不清楚的地方是梨与,有的人說(shuō)是用gradle堕花,但是我這是用gradlew才有效果,我不知道這兩個(gè)命令的區(qū)別粥鞋。

順帶一說(shuō)缘挽,常用的task有assemble、check、build壕曼、clean苏研,task可以用命令來(lái)執(zhí)行。

注意:如果你看到gradlew這個(gè)命令腮郊,那就是對(duì)構(gòu)建工具進(jìn)行操作的命令摹蘑。

二.編譯過(guò)程

Android的編譯過(guò)程很復(fù)雜,不是我這種渣渣能看得懂的伴榔,我只知道項(xiàng)目經(jīng)過(guò)編譯后得到dex文件和資源文件纹蝴。

編譯什么的,一聽(tīng)就有點(diǎn)不理解的意思踪少。apk是通過(guò)代碼進(jìn)行先編譯后打包得到的,這樣講就大概覺(jué)得編譯有點(diǎn)意思糠涛。

在別人寫的博客中有說(shuō)到援奢,Gradle編譯分為三個(gè)階段:
(1)初始化階段:創(chuàng)建 Project 對(duì)象
(2)配置階段:創(chuàng)建project下的task
(3)執(zhí)行階段:執(zhí)行task

所以為什么在模塊化中每個(gè)模塊能單獨(dú)編譯,因?yàn)槊總€(gè)模塊在初始化階段會(huì)得到一個(gè)Project 忍捡。

image.png

三.Android Gradle結(jié)構(gòu)

Gradle在AS中有3個(gè)基本的組成集漾,一個(gè)是settings.gradle,一個(gè)是總項(xiàng)目的build.gradle砸脊,還有各個(gè)模塊的build.gradle

1.settings.gradle

這個(gè)文件很簡(jiǎn)單具篇,主要用來(lái)來(lái)配置多項(xiàng)目構(gòu)建。通俗點(diǎn)講就是你要構(gòu)建的項(xiàng)目中需要包含哪些模塊凌埂。

2.頂層build.gradle

一般文件結(jié)構(gòu)是這樣


image.png

官方也給出了各個(gè)部分作用


image.png

看看我們as給我們配的

buildscript {
    repositories {
        jcenter()//設(shè)置之后可以在項(xiàng)目中輕松引用jcenter上的開(kāi)源項(xiàng)目
    }
    dependencies {
        // 添加插件
        classpath 'com.android.tools.build:gradle:2.2.3'

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

allprojects {
    repositories {
        jcenter()//代碼托管庫(kù):設(shè)置之后可以在項(xiàng)目中輕松引用jcenter上的開(kāi)源項(xiàng)目
    }
}

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

好吧驱显,不裝逼了,其實(shí)我也很好奇為什么會(huì)有兩個(gè)repositories

3.模塊中的build.gradle
//說(shuō)明是app程序瞳抓,執(zhí)行的是app的task
apply plugin: 'com.android.application'

// android程序相關(guān)的配置
android {
    compileSdkVersion 26//編譯的SDK版本
    buildToolsVersion "26.0.1"http://編譯的Tools版本

    // 默認(rèn)配置
    defaultConfig {
        applicationId "com.example.kylinarm.biyemonk"http://應(yīng)用程序的包名
        minSdkVersion 158//支持的最低版本
        targetSdkVersion 26//支持的目標(biāo)版本
        versionCode 1//需要構(gòu)建的應(yīng)用的版本
        versionName "1.0"http://需要構(gòu)建的應(yīng)用的版本名
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    // 這個(gè)我在打包那說(shuō)過(guò)埃疫,正式包和測(cè)試包的配置
    buildTypes {
        //正式包,你開(kāi)心也可以多寫個(gè)debug測(cè)試包的配置
        release {
            minifyEnabled false//是否混淆(true為混淆)
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'//混淆文件
        }
    }
}

//依賴孩哑,這個(gè)沒(méi)什么好說(shuō)的
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    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:26.0.0-alpha1'
    testCompile 'junit:junit:4.12'
    compile project(':baselibrary')
    compile project(':componentlibrary')
    compile 'com.jakewharton:butterknife:5.1.1'
}

在android{}的配置中栓霜,不光只有defaultConfig、buildTypes 這些横蜒,還有其它的胳蛮,我這就不多說(shuō),用到再說(shuō)丛晌,因?yàn)槲铱偣惨仓挥眠^(guò)那幾種仅炊,并不知道全部的配置。

四.總結(jié)

這里主要講的是淺談茵乱,gradle的知識(shí)內(nèi)容很多茂洒,有些都出了一本書專門講gradle,我懂的也不多,就懂它的一個(gè)大概的一些基本的原理督勺,某些功能比如說(shuō)打包渠羞,我也是需要具體去查怎么使用。

我總結(jié)對(duì)gradle的理解:
(1)gradle是一個(gè)build tools智哀,主要功能是執(zhí)行task
(2)Android配置中的配置內(nèi)容要記住次询,因?yàn)樗玛P(guān)項(xiàng)目的構(gòu)建
(3)gradle構(gòu)建的一個(gè)過(guò)程,也就是它的生命周期

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓷叫,一起剝皮案震驚了整個(gè)濱河市屯吊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摹菠,老刑警劉巖盒卸,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異次氨,居然都是意外死亡蔽介,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門煮寡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)虹蓄,“玉大人,你說(shuō)我怎么就攤上這事幸撕∞弊椋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵坐儿,是天一觀的道長(zhǎng)律胀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)挑童,這世上最難降的妖魔是什么累铅? 我笑而不...
    開(kāi)封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮站叼,結(jié)果婚禮上娃兽,老公的妹妹穿的比我還像新娘。我一直安慰自己尽楔,他們只是感情好投储,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著阔馋,像睡著了一般玛荞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呕寝,一...
    開(kāi)封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天勋眯,我揣著相機(jī)與錄音,去河邊找鬼。 笑死客蹋,一個(gè)胖子當(dāng)著我的面吹牛塞蹭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播讶坯,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼番电,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了辆琅?” 一聲冷哼從身側(cè)響起漱办,我...
    開(kāi)封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婉烟,沒(méi)想到半個(gè)月后娩井,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隅很,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年撞牢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叔营。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖所宰,靈堂內(nèi)的尸體忽然破棺而出绒尊,到底是詐尸還是另有隱情,我是刑警寧澤仔粥,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布婴谱,位于F島的核電站,受9級(jí)特大地震影響躯泰,放射性物質(zhì)發(fā)生泄漏谭羔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一麦向、第九天 我趴在偏房一處隱蔽的房頂上張望瘟裸。 院中可真熱鬧,春花似錦诵竭、人聲如沸话告。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沙郭。三九已至,卻和暖如春裳朋,著一層夾襖步出監(jiān)牢的瞬間病线,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留送挑,地道東北人绑莺。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像让虐,于是被迫代替她去往敵國(guó)和親紊撕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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