Android 詳解 build.gradle 文件

不同于 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ì)的分析示损,這里大家可以隨便自己新建一個項目

image.png
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)容非常短蚯姆,但卻是非常重要的,希望大家可以好好掌握洒敏,明天就是周末了龄恋,大家周末愉快

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凶伙,隨后出現(xiàn)的幾起案子郭毕,更是在濱河造成了極大的恐慌,老刑警劉巖函荣,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件显押,死亡現(xiàn)場離奇詭異,居然都是意外死亡傻挂,警方通過查閱死者的電腦和手機乘碑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來金拒,“玉大人兽肤,你說我怎么就攤上這事⌒髋祝” “怎么了资铡?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幢码。 經(jīng)常有香客問我笤休,道長,這世上最難降的妖魔是什么症副? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任店雅,我火速辦了婚禮政基,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘底洗。我一直安慰自己腋么,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布亥揖。 她就那樣靜靜地躺著珊擂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪费变。 梳的紋絲不亂的頭發(fā)上摧扇,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音挚歧,去河邊找鬼扛稽。 笑死,一個胖子當(dāng)著我的面吹牛滑负,可吹牛的內(nèi)容都是我干的在张。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼矮慕,長吁一口氣:“原來是場噩夢啊……” “哼帮匾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痴鳄,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤瘟斜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后痪寻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體螺句,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年橡类,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛇尚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡顾画,死狀恐怖取劫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亲雪,我是刑警寧澤勇凭,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布疚膊,位于F島的核電站义辕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏寓盗。R本人自食惡果不足惜灌砖,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一璧函、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧基显,春花似錦蘸吓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窜醉,卻和暖如春宪萄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榨惰。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工拜英, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人琅催。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓居凶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親藤抡。 傳聞我的和親對象是個殘疾皇子侠碧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,310評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)杰捂,斷路器舆床,智...
    卡卡羅2017閱讀 134,711評論 18 139
  • 這一章主要針對項目中可以用到的一些實用功能來介紹Android Gradle,比如如何隱藏我們的證書文件嫁佳,降低風(fēng)險...
    acc8226閱讀 7,644評論 3 25
  • 1.介紹 如果你正在查閱build.gradle文件的所有可選項挨队,請點擊這里進行查閱:DSL參考 1.1新構(gòu)建系統(tǒng)...
    Chuckiefan閱讀 12,142評論 8 72
  • 我自己每天雷打不動的一套是美顏Opc-3、葡萄籽精華蒿往、消化酶酵素盛垦、蘆薈汁和含鐵多維,每天早上起床第一件事一定是喝營...
    maysong閱讀 944評論 0 0