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)域中一個跨越性飛躍腰湾。
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)及代碼如下圖:
項目結(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)
一個項目的根目錄下放置了整個項目構(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ù)塔猾。
問題
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