Android Studio是采用Gradle來構(gòu)建項目的狈定,一個Android項目中包含兩個build.gradle文件甥桂,如下圖:
(1)最外層目錄下build.gradle文件
最外層目錄下的build.gradle文件代碼如下:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
忽略不明白的語法已旧,從字面上我們可以看出接箫,關(guān)鍵有兩部分的代碼肥印,repositories閉包和dependencies閉包性锭。
1、repositories閉包
該閉包中聲明了jcenter()的配置涉兽,其中jcenter是一個代碼托管倉庫,上面托管了很多Android開源項目篙程,在這里配置了jcenter后我們可以在項目中方便引用jcenter上的開源項目枷畏。
2、dependencies閉包
該閉包使用classpath聲明了一個Gradle插件虱饿,由于Gradle并不只是用來構(gòu)建Android項目拥诡,因此此處引入相關(guān)插件來構(gòu)建Android項目,其中'2.2.2'為該插件的版本號氮发,可以根據(jù)最新的版本號來調(diào)整渴肉。
(2)模塊目錄下build.gradle文件
項目中app模塊下的build.gradle文件中的內(nèi)容如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.wkui.douban.easysearch"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.2.0'
testCompile 'junit:junit:4.12'
}
從文件內(nèi)容可以看出,主要分為三大部分:
1爽冕、apply plugin
文件中第一行使用apply plugin表示應(yīng)用了一個插件仇祭,該插件一般有兩種值可選:
一種為'com.android.application',表示該模塊為應(yīng)用程序模塊颈畸,可以直接運行乌奇;另一種為'com.android.library'没讲,表示該模塊為庫模塊,只能作為代碼庫依附于別的應(yīng)用程序模塊來運行礁苗。
2爬凑、android閉包
這個閉包主要為了配置項目構(gòu)建的各種屬性,compileSdkVersion用于指定項目的編譯版本试伙,25表示使用Android 7.1系統(tǒng)的SDK編譯嘁信。buildToolsVersion用于指定項目構(gòu)建工具的版本。android閉包中嵌套了defaultConfig閉包和buildTypes閉包:
1) defaultConfig閉包
對項目的更多細(xì)節(jié)進(jìn)行配置疏叨,其中applicationId指定了項目的包名潘靖,我們可以通過修改這個值來修改項目的包名。
minSdkVersion指定項目最低兼容的版本考廉,這里指定為15秘豹,表示最低兼容到Android 4.0系統(tǒng)。
targetSdkVersion指定的值表示在該目標(biāo)版本上已經(jīng)做過充分測試昌粤,系統(tǒng)會為該應(yīng)用啟動一些對應(yīng)該目標(biāo)系統(tǒng)的最新功能特性既绕,Android系統(tǒng)平臺的行為變更,只有targetSdkVersion的屬性值被設(shè)置為大于或等于該系統(tǒng)平臺的API版本時涮坐,才會生效凄贩。例如,若指定targetSdkVersion值為22袱讹,則表示該程序最高只在Android5.1版本上做過充分測試疲扎,在Android6.0系統(tǒng)上(對應(yīng)targetSdkVersion為23)擁有的新特性如系統(tǒng)運行時權(quán)限等功能就不會被啟用。
2) buildTypes閉包
這個閉包主要指定生成安裝文件的主要配置捷雕,一般包含兩個子閉包椒丧,一個是debug閉包,用于指定生成測試版安裝文件的配置救巷,可以忽略不寫壶熏;另一個是release閉包,用于指定生成正式版安裝文件的配置浦译。
上面的代碼中省去了debug閉包的內(nèi)容棒假,只寫了release閉包。其中minifyEnabled表明是否對代碼進(jìn)行混淆精盅,true表示對代碼進(jìn)行混淆帽哑。proguardFiles指定混淆的規(guī)則文件,這里指定了proguard-android.txt文件和proguard-rules.pro文件兩個文件叹俏,proguard-android.txt文件為默認(rèn)的混淆文件妻枕,里面定義了一些通用的混淆規(guī)則。proguard-rules.pro文件位于當(dāng)前項目的根目錄下,可以在該文件中定義一些項目特有的混淆規(guī)則佳头。
3鹰贵、dependencies閉包
該閉包定義了項目的依賴關(guān)系,一般項目都有三種依賴方式:本地依賴康嘉、庫依賴和遠(yuǎn)程依賴碉输。本地依賴可以對本地的jar包或目錄添加依賴關(guān)系,庫依賴可以對項目中的庫模塊添加依賴關(guān)系亭珍,遠(yuǎn)程依賴可以對jcener庫上的開源項目添加依賴關(guān)系敷钾。
下面對該閉包中定義的語句進(jìn)行解釋。
第一行的compile fileTree是一個本地依賴聲明肄梨,表示將libs目錄下所有.jar后綴的文件都添加到項目的構(gòu)建路徑當(dāng)中阻荒。
第二行的compile語句為 遠(yuǎn)程依賴聲明,'com.android.support:appcompat-v7:25.2.0'為一個標(biāo)準(zhǔn)的遠(yuǎn)程依賴庫格式众羡,其中com.android.support為域名部分侨赡,用于區(qū)分不同公司的庫;appcompat-v7為組件名稱粱侣,用于區(qū)分同一個公司的不同庫羊壹;25.2.0為版本號,用于區(qū)分同一個庫的不同版本齐婴。加上這句聲明后油猫,Gradle在構(gòu)建項目時會先檢查一下本地是否已經(jīng)緩存過該庫,若沒有緩存則自動聯(lián)網(wǎng)下載柠偶,下載后自動添加到項目的構(gòu)建路徑中去情妖。
testCompile語句為聲明測試用例庫的,暫時沒有用到诱担。這里沒有用到庫依賴聲明毡证,若有一個庫模塊名為helper,那么添加這個庫依賴關(guān)系需要加入compile project(':helper')這句聲明蔫仙。