Gradle項目結(jié)構(gòu)

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
Paste_Image.png

根目錄的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)境。引入這個本地的即可。

Paste_Image.png

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"
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容