不同于 Eclispse臀玄,Android Studio 是采用 Gradle 來構(gòu)建項目的,Gradle 是一個非常先進強大的項目構(gòu)建工具畅蹂,它使用了一種基于 Groovy 領(lǐng)域的特定語言(DSL)來聲明項目設(shè)置,摒棄了基于 XML(如 Ant 和 Maven)的各種繁瑣的配置荣恐,今天我們就來一起探討 android Studio 中強大的項目構(gòu)建工具 Gradle
一液斜、簡介
一般來說一個新創(chuàng)建的項目中,有兩個 build.gradle 文件叠穆,一個是工程目錄下的少漆,一個是 app 目錄下的,這兩個 build.gradle 文件對 Android Studio 項目的作用是非常重要的硼被,接下來我們就新建一個項目來進行詳細(xì)的分析示损,這里大家可以隨便自己新建一個項目
1)工程目錄下的 build.gradle 文件
buildscript {
repositories {
//代碼托管倉庫
jcenter()
}
dependencies {
//Gradle 插件及使用版本
classpath 'com.android.tools.build:gradle:2.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
//代碼托管倉庫
jcenter()
}
}
// 運行g(shù)radle clean時,執(zhí)行此處定義的task嚷硫。
// 該任務(wù)繼承自Delete检访,刪除根目錄中的build目錄。
// 相當(dāng)于執(zhí)行Delete.delete(rootProject.buildDir)
task clean(type: Delete) {
delete rootProject.buildDir
}
這些代碼都是自動生成的仔掸,這里我們先忽略語法層面的東西脆贵,只看關(guān)鍵的部分,首先兩處 repositories 的閉包中都生明了 jcenter() 這個配置起暮,其實它是一個代碼托管倉庫卖氨,很多開源的 Android 項目都會選擇將代碼托管到到 jcenter() 上,聲明了這個配置,我們就可以輕松的引用 jcenter() 上任何的開源項目了筒捺,接下來柏腻,dependencies 閉包中使用 classpath 聲明了一個 Gradle 插件,這是因為 Gradle 并不是專門為構(gòu)建 Android 項目而開發(fā)的系吭,Java五嫂、C++ 等很多項目都可以使用 Gradle 來構(gòu)建,因此我們?nèi)绻胍褂盟鼇順?gòu)建 Android 項目必須聲明 com.anddroid.tools.build:gradle:2.3.0 這個插件村斟,其中最后的數(shù)字部分是 Gradle 插件的版本號贫导,到這里我們工程目錄下的 build.gradle 就分析完了,通常情況下蟆盹,這個文件中的內(nèi)容不需要修改孩灯,但是當(dāng)我們模塊化開發(fā)的時候,也可以在這里配置全局項目的構(gòu)建相關(guān)的配置
2)app 目錄下的 build.gradle 文件
//表明是應(yīng)用程序的插件
apply plugin: 'com.android.application'
//Android 閉包
android {
//指定項目的編譯版本
compileSdkVersion 25
//指定項目的構(gòu)建工具版本
buildToolsVersion "25.0.3"
defaultConfig {
//指定項目的包名
applicationId "com.example.qiudengjiao.contentprovider"
//指定項目最低兼容的 Android 版本
minSdkVersion 15
//指定項目的最高兼容 Android 版本
targetSdkVersion 25
//指定項目的版本號
versionCode 1
//指定項目的版本名
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
//指定是否對項目的代碼進行混淆(true:混淆 false:不混淆)
minifyEnabled false
//proguardFiles用于指定混淆時使用的規(guī)則文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
app 目錄下的 build.gradle 文件中的內(nèi)容相對工程目錄下的 build.gradle 文件復(fù)雜了很多逾滥,不過不要緊峰档,我們一起來看一下,首先第一行應(yīng)用了一個插件寨昙,這里一般有兩種值可選
com.android.application: 表示是一個應(yīng)用程序模塊
com.android.library: 表示是一個庫模塊
應(yīng)用程序模塊和庫模塊最大的區(qū)別在于一個是可以直接運行的讥巡,一個只能作為代碼庫依附于別的應(yīng)用程序模塊來運行
接下來是一個 android 閉包,在這個閉包中我們就可以配置項目構(gòu)建的各種屬性了舔哪,其中 compileSdkVersion 用于指定項目的編譯版本欢顷,buildToolsVersion 用于指定項目構(gòu)建工具的版本,目前最新的版本就是 25.0.3捉蚤,如果有更新的抬驴,Android Studio 會提醒
然后接下來我們看到在 android 閉包中有嵌套了一個 defaultConfig 閉包,defaultConfig 閉包中可以對項目的更多細(xì)節(jié)進行配置缆巧,其中布持,applicationId 用于指定項目的包名,其實我們在項目創(chuàng)建的時候已經(jīng)進行過指定陕悬,如果想后來進行修改题暖,就可以在這里進行修改,minSdkVersion 用于指定項目的最低兼容 Android 系統(tǒng)版本捉超,這里指定的是 15 表示最低兼容到 Android 4.0 系統(tǒng)胧卤,targetSdkVersion 指定的值表示你在該目標(biāo)版本上已經(jīng)做過充分的測試,系統(tǒng)將會為你的應(yīng)用程序啟用最新的功能和特性拼岳,例如 android 6.0 系統(tǒng)中引入了運行時權(quán)限這個功能灌侣,如果你將 targetSdkVersion 指定成 23 或更高,那么系統(tǒng)就會為你的程序啟用運行時權(quán)限功能裂问,而如果你將 targetSdkVersion 指定成 22侧啼,那么就說明你的程序最高只能在 Android 5.1 系統(tǒng)上做過充分的測試牛柒,Android 6.0 系統(tǒng)中引入的新功能自然就不會啟用了,剩下的兩個屬性 versionCode 用于指定項目的版本號痊乾,versionName 用于指定項目的版本名這兩個屬性在生成安裝文件的時候特別重要
分析完 defaultConfig 閉包皮壁,我們接著來分析 buildTypes 閉包,buildTypes 閉包中用于指定生成安裝文件的相關(guān)配置哪审,通常會有兩個子閉包蛾魄,一個是 debug,一個是 release湿滓,debug 閉包用于指定生成測試版安裝文件的配置滴须,release 閉包用于指定生成正式版安裝文件的配置,另外 debug 閉包是可以忽略不寫的叽奥,因此我們看到上面的代碼中就只有一個 release 閉包扔水,下面我們來看一下 release 閉包中的內(nèi)容,minifyEnabled 用于指定是否對項目的代碼進行混淆朝氓,true 表示混淆魔市,false 表示不混淆,proguardFiles 用于指定混淆時使用的規(guī)則文件赵哲,這里可以指定兩個文件待德,第一個 proguard-android.txt 是在 Android SDK 目錄下的,里面是所有項目通用的混淆規(guī)則枫夺,第二個 proguard-rules.pro 是當(dāng)前項目的根目錄下的将宪,里面可以編寫當(dāng)前項目特有的混淆規(guī)則,需要注意的是橡庞,通過 Android Studio 直接運行的項目生成的都是測試版安裝文件较坛,正式版的我們也會在后面的文章中進行學(xué)習(xí)
這樣整個 android 閉包中的內(nèi)容我們就分析完了,接下來還有一個 dependencies 閉包毙死,這個閉包的功能非常強大,它主要是用來指定當(dāng)前項目所有的依賴關(guān)系喻鳄,通常 Android Studio 項目一共有 3 種依賴方式扼倘,本地依賴,庫依賴和遠程依賴除呵,本地依賴可以對本地的 Jar 包或目錄添加依賴關(guān)系再菊,庫依賴可以對項目中的庫模塊添加依賴關(guān)系,遠程依賴則可以對 jcenter 庫上的開源項目添加依賴關(guān)系颜曾,compile fileTree 就是一個本地依賴聲明纠拔,它表示將 libs 目錄下所有 .jar 后綴的文件都添加項目的構(gòu)建路徑中,而 com.android.support:appcompat-v7:25.3.1 就是一個標(biāo)準(zhǔn)的遠程依賴庫格式泛豪,其中 com.android.support 是域名部分稠诲,用于和其他公司的庫做區(qū)分侦鹏,appcompat-v7 是組名稱,用于和同一個公司中不同的庫做區(qū)分臀叙,25.3.1 是版本號略水,用于和同一個庫的不同版本做區(qū)分,加上這句聲明后劝萤,Gradle 在構(gòu)建項目時會首先檢查一下本地是否已經(jīng)有這個庫的緩存渊涝,如果沒有的話則會去自動聯(lián)網(wǎng)下載,然后再添加到項目的構(gòu)建路徑中床嫌,至于庫依賴聲明跨释,它的基本格式是 compile project 后面加上要依賴的庫名稱,比如一個模塊的名字叫 helper厌处,那么添加這個庫依賴就是 compile proiect(':helper')鳖谈,這樣聲明即可,另外的 testCompile 是用于聲明測試用例庫的
今天就分享到這里嘱蛋,今天分享的內(nèi)容非常短蚯姆,但卻是非常重要的,希望大家可以好好掌握洒敏,明天就是周末了龄恋,大家周末愉快