Android開發(fā)札記初級(四)Gradle詳解

Gradle 概述

  • Gradle是一種基于 Apache Ant 和 Apache Maven 概念的項(xiàng)目自動化建構(gòu)工具冀宴,它拋棄了基于 XML 的構(gòu)建腳本繁瑣的配置现恼,取而代之的是采用一種基于 Groovy(基于 Java) 的內(nèi)部領(lǐng)域特定語言(DSL)翰守,來聲明項(xiàng)目設(shè)置库糠。
  • Gradle 以module 來管理 Project沙兰,在 Gradle 構(gòu)建的 Gradle Project 中通常包含 application module(com.android.application)與 library module(com.android.library)兩種 module。
  • Gradle這個工具集成了構(gòu)抒钱、測試蜓肆、發(fā)布和其他,比如軟件打包谋币,生成注釋文檔等功能仗扬。
  • 目前主流的打包方式有 ant、maven蕾额、gradle早芭。gradle 是近幾年發(fā)展起來的自動化構(gòu)建工具,解決 an t構(gòu)建上的繁瑣代碼诅蝶。比如在 ant 上發(fā)布多渠道的包退个,你需要自己寫腳本替換渠道名稱,而在 gradle 中就不需要了调炬。已經(jīng)內(nèi)建支持多渠道打包帜乞。

Gradle 生命周期

gradle 構(gòu)建一個工程主要分為三部分:

  • 初始化階段:主要是解析 setting.gradle 文件郎哭。

  • 讀取配置階段:主要是解析所有的 projects 下的 build.gradle 文件豌拙,包括 rootProject 和其他的 subprojects(子項(xiàng)目)澳眷,檢查語法,確定 tasks 依賴以建立 task 的有向無循環(huán)圖匀谣,檢查 task 里引用的文件目錄是否存在等(這一步也進(jìn)一步驗(yàn)證了減少 setting.gradle 里的 module 數(shù)量可以加快編譯速度,因?yàn)闇p少一個 module 资溃,需要解析的 build.gradle 文件就減少一個武翎,第 3 步里就不會執(zhí)行本屬于這個 module 的任務(wù)了)

  • 執(zhí)行階段:按照 上一個階段中建立的有向無循環(huán)圖來執(zhí)行每一個 task ,整個編譯過程中溶锭,這一步基本會占去 9 成以上的時間宝恶,尤其是對于 Android 項(xiàng)目來講,將 java 轉(zhuǎn)為 class
    compileDebugJavaWithJavac/compileReleaseJavaWithJavac
    和將 class 合并成 dex
    transformClassesWithDexForDebug/transformClassesWithDexForRelease

基礎(chǔ)

一個 Android Studio 項(xiàng)目中,會存在多個 .gradle 文件垫毙。其中 Project 目錄下存在一個 工程 build.gradle 文件霹疫,而每一個 module 會存在一個 build.gradle 文件。

工程中的 build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
      //聲明使用jcenter()庫综芥,可以理解成一個新的中央遠(yuǎn)程庫丽蝎,可以把自己的庫上傳到j(luò)ecenter()供別人一起使用,兼容maven中心倉庫膀藐,而且性能更優(yōu)屠阻。
        jcenter()  
    }
    dependencies {
        //依賴android提供的2.2.1的 gradle build
        classpath 'com.android.tools.build:gradle:2.2.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
//為所有的工程的repositories配置為jcenters
allprojects {
    repositories {
        jcenter()
    }
}
//清楚工程的任務(wù)
task clean(type: Delete) {
    delete rootProject.buildDir
}

模塊中的 build.gradle

//這表示module是一個安卓項(xiàng)目
apply plugin: 'com.android.application'
// 配置了所有android構(gòu)建的參數(shù)
android {
    // 表示是基于哪個Sdk版本編譯
    compileSdkVersion 24
    //基于哪個構(gòu)建工具版本進(jìn)行構(gòu)建的
    buildToolsVersion "24.0.2"

//缺省配置主要包括:應(yīng)用ID、最小SDK版本额各、目標(biāo)SDK版本国觉、應(yīng)用版本號和應(yīng)用版本名
    defaultConfig {
        applicationId "com.example.newam.helloworld"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    //buildTypes是構(gòu)建類型,常用的有release和debug兩種虾啦,可以在這里面啟用混淆麻诀,啟用zipAlign以及配置簽名信息等。
    buildTypes {
        release {
            //是否啟用代碼混淆
            minifyEnabled false 
             // 混淆使用文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
//dependencies它定義了該module需要依賴的jar缸逃,aar针饥,jcenter庫信息。
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:gridlayout-v7:24.2.1'
}

待補(bǔ)充

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末需频,一起剝皮案震驚了整個濱河市丁眼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昭殉,老刑警劉巖苞七,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挪丢,居然都是意外死亡蹂风,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門乾蓬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惠啄,“玉大人,你說我怎么就攤上這事任内∧於桑” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵死嗦,是天一觀的道長趋距。 經(jīng)常有香客問我,道長越除,這世上最難降的妖魔是什么节腐? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任外盯,我火速辦了婚禮,結(jié)果婚禮上翼雀,老公的妹妹穿的比我還像新娘饱苟。我一直安慰自己,他們只是感情好锅纺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布掷空。 她就那樣靜靜地躺著,像睡著了一般囤锉。 火紅的嫁衣襯著肌膚如雪坦弟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天官地,我揣著相機(jī)與錄音酿傍,去河邊找鬼。 笑死驱入,一個胖子當(dāng)著我的面吹牛赤炒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亏较,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼莺褒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雪情?” 一聲冷哼從身側(cè)響起遵岩,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巡通,沒想到半個月后尘执,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宴凉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年誊锭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弥锄。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丧靡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出籽暇,到底是詐尸還是另有隱情温治,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布图仓,位于F島的核電站,受9級特大地震影響但绕,放射性物質(zhì)發(fā)生泄漏救崔。R本人自食惡果不足惜惶看,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望六孵。 院中可真熱鬧纬黎,春花似錦、人聲如沸劫窒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽主巍。三九已至冠息,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間孕索,已是汗流浹背逛艰。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搞旭,地道東北人散怖。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像肄渗,于是被迫代替她去往敵國和親镇眷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,074評論 25 707
  • 參考資料:http://gold.xitu.io/post/580c85768ac247005b5472f9htt...
    zhaoyubetter閱讀 10,996評論 0 6
  • 是什么翎嫡? 在語法上是基于Groovy語言的(Groovy 是一種基于JVM的敏捷開發(fā)語言欠动,可以簡單的理解為強(qiáng)類型語...
    千山萬水迷了鹿閱讀 99,558評論 4 122
  • 前言 從2013年Google推出Android Studio(后面以AS簡稱)開始,到現(xiàn)在已經(jīng)歷經(jīng)3年钝的,版本也發(fā)...
    dfqin閱讀 1,836評論 1 3
  • 淺秋翁垂,臺風(fēng)剛拂過,空氣中彌漫著涼爽的味道硝桩。恰逢周末沿猜,與妻子、兒子一起去豆腐尖郊游碗脊。 車行至山腳啼肩,迎面是一座水庫,多...
    眼睛歪了閱讀 168評論 0 0