Gradle基本認(rèn)識及理解


date: 2016-12-09 16:39:53

A build system that we think is a quantum leap for build technology in the Java (JVM) world.
gradle是java編譯技術(shù)領(lǐng)域中一個跨越性飛躍腰湾。

Hello gradle!

Gradle是什么脐湾?

gradle首先可以理解為一個項目構(gòu)建工具,或者理解深入點颤枪,是一種編程框架底挫,安卓項目最流行的也是google官方推薦的安卓項目編譯工具恒傻。官方介紹如下:

可見gradle有多么高的認(rèn)可度,所以是值得java程序員特別android程序員熟練掌握并應(yīng)用的一項技能建邓!

Gradle 強(qiáng)大再哪里盈厘?為何選擇她?

優(yōu)勢(gradle provides):

  • 比ant官边, maven更加靈活強(qiáng)大且簡單的構(gòu)建能力
  • 強(qiáng)大(powerful support)的多項目(multi-project)編譯支持
  • 強(qiáng)大的項目依賴關(guān)系管理
  • 完善的maven 庫支持(repository infrastructure)
  • 簡單強(qiáng)大的Groovy語言
  • 技術(shù)成熟沸手,可以處理大規(guī)模構(gòu)建
  • 可定制插件(plugin),自定義能力強(qiáng)
  • 總之注簿,是java程序員首先編譯工具~

Gradle安裝及環(huán)境部署

安裝

下載地址:https://gradle.org/gradle-download/?_ga=1.168710433.1636299837.1479991326

文檔位置:https://docs.gradle.org/current/userguide/installation.html

下載后解壓到制定pc位置契吉,然后配置環(huán)境變量即可。
當(dāng)然也可以用sudo apt來安裝诡渴,免去手動配置環(huán)境變量捐晶。

Gradle Wrapper

Gradle的本地包裝,可以省去在PC上安裝gradle.Google 推出了 Gradle Wrapper 的概念,就是他在你每個項目都配置了一個指定版本的 Gradle 惑灵,你可以理解為每個 Android 項目本地都有一個小型的 Gradle 山上,通過這個每個項目你可以支持用不同的 Gradle 版本來構(gòu)建項目,這樣wrapper跟隨項目同步保存,就可以在其他pc機(jī)器上免安裝gradle,并且用統(tǒng)一的gradle版本英支。胶哲。

如何創(chuàng)建自己的gradlw wrapper?

先在自己項目下添加 build.gradlw 文件

task createWrapper( type: Wrapper){
    gradleVersion = '2.1-preview-1'
}

執(zhí)行 gradle cW 就生成了我們想要的wrapper,目錄結(jié)構(gòu)及代碼如下圖:

wrapper.png

項目結(jié)構(gòu)基本認(rèn)識

Gradle項目有兩個概念,project和task, Project為一個項目潭辈,Task為一次構(gòu)建任務(wù)中的一個個別任務(wù),Task是隸屬與project的澈吨,每次build可以有多個project. Gradle以module為單位來管理project.

這里我們已一個安卓項目來說明gradle的基本項目構(gòu)建結(jié)果把敢。

Gradle管理的Android項目基本結(jié)構(gòu)

project.png

一個項目的根目錄下放置了整個項目構(gòu)建的相關(guān)配置,除了gradle wrapper相關(guān)文件外谅辣,放置了整個項目的相關(guān)配置修赞。

app目錄為項目主目錄,主項目module放在里面桑阶,submodule目錄下可以放多個附屬項目柏副。每個module項目根目錄有個build.gradle文件,定義了該module是如何編譯的蚣录。

1 settings.gradle為整個項目的多個module配置割择,如:

include ':App', ':WaveProgress'
include ':SwitchButton'

project(':SwitchButton').projectDir = new File('submodules/SwitchButton')
project(':WaveProgress').projectDir = new File('submodules/Waveprogress/app')

如何各個module的根目錄即為整個項目的根目錄,則不用指定projectDir.

2 local.properties 為放置本地pc相關(guān)配置路徑萎河,如相關(guān)sdk保存路徑荔泳,此文件無需同步保存。

ndk.dir=/home/android-sdk-linux/ndk-bundle
sdk.dir=/home/android-sdk-linux

3 gradle.properties 為gradle設(shè)置或賦值一些變量

## Project-wide Gradle settings.
#
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Thu Jan 21 20:02:21 CST 2016
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118

4 根目錄下build.gradle

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

allprojects {
    repositories {
        jcenter()
    }
}

這里定義了整個項目的相關(guān)全局變量及引用虐杯,默認(rèn)android項目會在這里引用jcenter()代碼倉庫玛歌。gradle有三種倉庫可以在這里設(shè)置,maven ivy 及本地 flat倉庫擎椰。

maven{
    url '...'
    }
ivy{
    url '...'
    }
flatDir{
    url '...'
    }

當(dāng)然這些倉庫可以定義別名支子,直接引用別名更方便如:

 repositories {
        jcenter()
    }

有些場景maven也需要引用本地庫,如java項目中引用一些android庫。maven也可以設(shè)置m2repository目錄达舒,如:

    maven {
        url "/home/android-sdk-linux/extras/android/m2repository"
    }

5 android編譯文件build.gradle

//添加插件
apply plugin: 'com.android.application' //安卓項目插件
apply plugin: 'com.neenbedankt.android-apt' //可以添加多個插件

android {
    compileSdkVersion 24 //編譯版本
    buildToolsVersion deps.bTVersion //編譯工具版本
    defaultConfig { //項目默認(rèn)配置值朋,會應(yīng)用到buildTypes相關(guān)版本上
        applicationId "com.canking.bind.cxinjectdemo"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {//編譯版本控制,可以配置多個
        release {
            minifyEnabled false //混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {//依賴模塊
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile deps.supportCompat
    compile deps.supportv7

    testCompile 'junit:junit:4.12'
    compile project(':bindview')
    compile project(':annimationlib')
    apt project(':javabind')
}

Gradle任務(wù)

gradle的安卓插件提供了4個定級任務(wù):

assemble 構(gòu)建項目輸出
check 運行檢測和測試任務(wù)
build 為assemble和check接合體
clean 清理任務(wù)

定級任務(wù)回合buildTypes中不同版本組合為新的不同任務(wù)休弃。
如:

./gradlew assembleDebug

細(xì)心的同學(xué)會在介紹Gradle Wrapper的時候發(fā)現(xiàn)吞歼,gradle命令是支持首字母簡寫的,如:

gradlw cW
./gradlw aD

通過 gradle tasks 可以查看項目多有的task任務(wù)塔猾。

tasks.png

問題

gradle項目編譯如何自定義化篙骡,比如項目build.gradle如何擴(kuò)展,如何如自己打包邏輯等待,想掌握這些技能就需要學(xué)習(xí)gradle的編寫語言Groovy,更靈活的構(gòu)建系統(tǒng)糯俗,幫助我們構(gòu)建更復(fù)雜的項目尿褪。
所有,下節(jié)將一起學(xué)習(xí)Groovy語音的基礎(chǔ)得湘,深入了解Gradle.

作者主頁:http:www.canking.win

Github:https://github.com/CankingApp

新浪:http://weibo.com/canking666

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杖玲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淘正,更是在濱河造成了極大的恐慌摆马,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸿吆,死亡現(xiàn)場離奇詭異囤采,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惩淳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門蕉毯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人思犁,你說我怎么就攤上這事代虾。” “怎么了激蹲?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵棉磨,是天一觀的道長。 經(jīng)常有香客問我托呕,道長含蓉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任项郊,我火速辦了婚禮馅扣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘着降。我一直安慰自己差油,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布任洞。 她就那樣靜靜地躺著蓄喇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪交掏。 梳的紋絲不亂的頭發(fā)上妆偏,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音盅弛,去河邊找鬼钱骂。 笑死叔锐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的见秽。 我是一名探鬼主播愉烙,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼解取!你這毒婦竟也來了步责?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤禀苦,失蹤者是張志新(化名)和其女友劉穎蔓肯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體振乏,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡省核,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了昆码。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡邻储,死狀恐怖赋咽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吨娜,我是刑警寧澤脓匿,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站宦赠,受9級特大地震影響陪毡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勾扭,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一毡琉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妙色,春花似錦桅滋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至煌珊,卻和暖如春号俐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背定庵。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工吏饿, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留踪危,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓找岖,卻偏偏與公主長得像陨倡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子许布,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理兴革,服務(wù)發(fā)現(xiàn),斷路器蜜唾,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 前言 從2013年Google推出Android Studio(后面以AS簡稱)開始杂曲,到現(xiàn)在已經(jīng)歷經(jīng)3年,版本也發(fā)...
    dfqin閱讀 1,825評論 1 3
  • 文 | 葉水送 ●●● 2016年1月14日袁余,《知識分子》主編擎勘、北京大學(xué)終身講席教授饒毅獲頒《第一財經(jīng)》“年度思想...
    知識分子閱讀 397評論 0 1
  • 不是夕陽落山眼前就升起黑暗 而是一點心魔 就如墮地獄 這一點心魔,是貪颖榜,是嗔棚饵,是癡 坐落于心間 將心城籠罩 這一點...
    王錯錯閱讀 167評論 0 2