Android群英傳讀書筆記
http://www.reibang.com/p/9df3c3b6067a 參考文章
一、Gradle認(rèn)識(shí)
Gradle本身是基于Groovy腳本語音構(gòu)建的。
二、使用gradle管理android工程
5個(gè)重要的部分
1.每個(gè)module有build.gradle
2.根目錄的build.gradle
3.gradle.properties
4.local.properties
5.settings.gradle
使用終端命令查看項(xiàng)目的結(jié)構(gòu)
tree
根目錄的build.gradle
buildscript中的
repositories負(fù)責(zé)指定使用的開源代碼倉(cāng)庫(kù)
dependencies指定了gradle插件的版本
allprojects中:
開發(fā)者對(duì)自己的項(xiàng)目進(jìn)行一些配置
1.項(xiàng)目的的build.gradle
![Upload Paste_Image.png failed. Please try again.]
android部分:這是編譯文件中最大的代碼塊或舞,關(guān)于android 的所有特殊配置都在這里,這就是由我們前面的聲明的 plugin 提供的蒙幻。
defaultConfig就是程序的默認(rèn)配置映凳,注意荣病,如果在AndroidMainfest.xml里面定義了與這里相同的屬性伏恐,會(huì)以這里的為主域滥。這里最有必要要說明的是applicationId的選項(xiàng):在我們?cè)?jīng)定義的AndroidManifest.xml中膘壶,那里定義的包名有兩個(gè)用途:一個(gè)是作為程序的唯一識(shí)別ID,防止在同一手機(jī)裝兩個(gè)一樣的程序绍在;另一個(gè)就是作為我們R資源類的包名掏婶。在以前我們修改這個(gè)ID會(huì)導(dǎo)致所有用引用R資源類的地方都要修改崔列。但是現(xiàn)在我們?nèi)绻薷腶pplicationId只會(huì)修改當(dāng)前程序的ID,而不會(huì)去修改源碼中資源文件的引用让禀。(引自參考文章)
buildTypes:定義了編譯類型摧莽,針對(duì)每個(gè)類型我們可以有不同的編譯配置庙洼,不同的編譯配置對(duì)應(yīng)的有不同的編譯命令。默認(rèn)的有debug镊辕、release 的類型油够。
dependencies:是屬于gradle 的依賴配置。它定義了當(dāng)前項(xiàng)目需要依賴的其他庫(kù)征懈。
2.Setting.gradle
這個(gè) setting 文件定義了哪些module 應(yīng)該被加入到編譯過程石咬,對(duì)于單個(gè)module 的項(xiàng)目可以不用需要這個(gè)文件
include ':app', ':smileapp', ':smileproject', ':orangeframework',':bilibili'
如果注掉了app,那么app module將不被編譯
3.Gradle Wrapper
為了解決向后兼容的問題受裹,gradle wrapper出現(xiàn)了碌补,它指定了gradle task是基于那種版本的gradle進(jìn)行編譯的,如果沒有會(huì)自動(dòng)去網(wǎng)上下載棉饶。當(dāng)然可以在setting中搜索gradle厦章,將gradle配置為使用本地的環(huán)境,因?yàn)槊總€(gè)androidstudio下載時(shí)照藻,同時(shí)會(huì)下載一個(gè)gradle環(huán)境袜啃。引入這個(gè)本地的即可。
4.Repositories
Repositories 就是代碼倉(cāng)庫(kù)幸缕,我們平時(shí)的添加的一些 dependency 就是從這里下載的群发,Gradle 支持三種類型的倉(cāng)庫(kù):Maven,Ivy和一些靜態(tài)文件或者文件夾
三、sourceSet指定目錄結(jié)構(gòu)
androidstudio是可以指定項(xiàng)目結(jié)構(gòu)的发乔。當(dāng)我們從Eclipse遷移一些項(xiàng)目到androidstudio上時(shí)熟妓,完全不用擔(dān)心。甚至可以完成繼承eclipse的目錄樣式栏尚,以及自定義目錄起愈。通過sourceSet的引入,將文件指定為資源目錄。在android領(lǐng)域中使用sourceSets
sourceSets{
main{
java.srcDirs=['src']
res.srcDirs=['res']
assets.srcDirs=['assets']
jni.srcDirs=['jni']
manifest.srcFile 'AnddroidManifest.xml'
}
}
保留原有eclipse配置
renderscript.srcDirs=['src']
aidl.srcDirs=['src']
四抬虽、全局信息的配置
在根目錄的build.gradle中加入ext標(biāo)簽
ext{
compileSdkVersion=23
minSdkVersion=“23.0.01”
.....
}
在module的gradle中引入
android{
compileSdkVersion rootProject.ext.compileSdkVersion.
}
五官觅、動(dòng)態(tài)配置參數(shù)
gradle的參數(shù)是可以動(dòng)態(tài)添加的,例如版本號(hào)的信息
defaultConfig{
versionCode getVersionCode()
}
def getVersionCode(){
......
}
六阐污、BuildType構(gòu)建不同類型apk
使用applicationIdSuffix參數(shù)為默認(rèn)的包名添加一個(gè)后綴休涤。以此來區(qū)分不同的構(gòu)建類型。例如我們?cè)瓉淼陌莄om.guo.test笛辟。如果打debug包通過aapt工具查看包名時(shí)功氨,包名和默認(rèn)的一樣,但是加上該參數(shù)后隘膘,會(huì)在默認(rèn)的包名尾端添加該字段疑故。因?yàn)樵贏ndroid系統(tǒng)中,通過包名來區(qū)分應(yīng)用的弯菊,包名相同就是同一個(gè)應(yīng)用纵势。例子中打出來的包名為:com.guo.test.guo。
buildTypes{
guo{
applicationIdSuffix ".guo"
}
}
當(dāng)我們使用了默認(rèn)構(gòu)建類型時(shí)管钳,系統(tǒng)還為我們生成了相應(yīng)的構(gòu)建語法gradle assembleGuo钦铁。
繼承其他的構(gòu)建類型
同樣我們可以繼承任何類型的配置 initWith(type_name),這樣就可以具有debug的配置。
buildTypes{
debug{
minifyEnabled false
}
guo.initWith(debug)
guo{
applicationIdSuffix ".guo"
}
}