Android群英傳讀書筆記
http://www.itdecent.cn/p/9df3c3b6067a 參考文章
一、Gradle認識
Gradle本身是基于Groovy腳本語音構(gòu)建的。
二、使用gradle管理android工程
5個重要的部分
1.每個module有build.gradle
2.根目錄的build.gradle
3.gradle.properties
4.local.properties
5.settings.gradle
使用終端命令查看項目的結(jié)構(gòu)
tree

根目錄的build.gradle
buildscript中的
repositories負責指定使用的開源代碼倉庫
dependencies指定了gradle插件的版本
allprojects中:
開發(fā)者對自己的項目進行一些配置
1.項目的的build.gradle
![Upload Paste_Image.png failed. Please try again.]
android部分:這是編譯文件中最大的代碼塊,關(guān)于android 的所有特殊配置都在這里,這就是由我們前面的聲明的 plugin 提供的。
defaultConfig就是程序的默認配置,注意,如果在AndroidMainfest.xml里面定義了與這里相同的屬性,會以這里的為主。這里最有必要要說明的是applicationId的選項:在我們曾經(jīng)定義的AndroidManifest.xml中,那里定義的包名有兩個用途:一個是作為程序的唯一識別ID,防止在同一手機裝兩個一樣的程序;另一個就是作為我們R資源類的包名。在以前我們修改這個ID會導(dǎo)致所有用引用R資源類的地方都要修改。但是現(xiàn)在我們?nèi)绻薷腶pplicationId只會修改當前程序的ID,而不會去修改源碼中資源文件的引用。(引自參考文章)
buildTypes:定義了編譯類型,針對每個類型我們可以有不同的編譯配置,不同的編譯配置對應(yīng)的有不同的編譯命令。默認的有debug、release 的類型。
dependencies:是屬于gradle 的依賴配置。它定義了當前項目需要依賴的其他庫。
2.Setting.gradle
這個 setting 文件定義了哪些module 應(yīng)該被加入到編譯過程,對于單個module 的項目可以不用需要這個文件
include ':app', ':smileapp', ':smileproject', ':orangeframework',':bilibili'
如果注掉了app,那么app module將不被編譯
3.Gradle Wrapper
為了解決向后兼容的問題,gradle wrapper出現(xiàn)了,它指定了gradle task是基于那種版本的gradle進行編譯的,如果沒有會自動去網(wǎng)上下載。當然可以在setting中搜索gradle,將gradle配置為使用本地的環(huán)境,因為每個androidstudio下載時,同時會下載一個gradle環(huán)境。引入這個本地的即可。

4.Repositories
Repositories 就是代碼倉庫,我們平時的添加的一些 dependency 就是從這里下載的,Gradle 支持三種類型的倉庫:Maven,Ivy和一些靜態(tài)文件或者文件夾
三、sourceSet指定目錄結(jié)構(gòu)
androidstudio是可以指定項目結(jié)構(gòu)的。當我們從Eclipse遷移一些項目到androidstudio上時,完全不用擔心。甚至可以完成繼承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標簽
ext{
compileSdkVersion=23
minSdkVersion=“23.0.01”
.....
}
在module的gradle中引入
android{
compileSdkVersion rootProject.ext.compileSdkVersion.
}
五、動態(tài)配置參數(shù)
gradle的參數(shù)是可以動態(tài)添加的,例如版本號的信息
defaultConfig{
versionCode getVersionCode()
}
def getVersionCode(){
......
}
六、BuildType構(gòu)建不同類型apk
使用applicationIdSuffix參數(shù)為默認的包名添加一個后綴。以此來區(qū)分不同的構(gòu)建類型。例如我們原來的包名是com.guo.test。如果打debug包通過aapt工具查看包名時,包名和默認的一樣,但是加上該參數(shù)后,會在默認的包名尾端添加該字段。因為在Android系統(tǒng)中,通過包名來區(qū)分應(yīng)用的,包名相同就是同一個應(yīng)用。例子中打出來的包名為:com.guo.test.guo。
buildTypes{
guo{
applicationIdSuffix ".guo"
}
}
當我們使用了默認構(gòu)建類型時,系統(tǒng)還為我們生成了相應(yīng)的構(gòu)建語法gradle assembleGuo。
繼承其他的構(gòu)建類型
同樣我們可以繼承任何類型的配置 initWith(type_name),這樣就可以具有debug的配置。
buildTypes{
debug{
minifyEnabled false
}
guo.initWith(debug)
guo{
applicationIdSuffix ".guo"
}
}