Android(gradle相關(guān))的原理性探尋學(xué)習(xí)

由于android開發(fā)在谷歌的帶領(lǐng)下,從以往的eclipse這個(gè)IDE大規(guī)模的遷移到了android studio上闯估,所以沥阱,更好的了解掌握相關(guān)的知識(shí)也是非常有必要的。

在android studio下開發(fā)少梁,谷歌儼然已經(jīng)幫我們做好了很多準(zhǔn)備工作,從模板到編譯打包矫付。其中一項(xiàng)凯沪,關(guān)于配置的構(gòu)建,里面涉及到了除java之外的很多東西买优,這就是Gradle妨马。

我們先只從Android Studio里對(duì)Gradle的配置入手挺举,里面的配置多多少少需要我們自己去調(diào)配,比如一些第三方在講怎么配置他們的庫(kù)的時(shí)候會(huì)告訴我們?cè)黾铀麄兊南嚓P(guān)的一些dependencies就可以使用了烘跺。但是除此之外湘纵,還可以看到其他的一些配置參數(shù),這些也是需要我們更加深入的了解掌握的滤淳。

究其根本梧喷,Gradle的構(gòu)建是基于Groovy語(yǔ)言的,Groovy語(yǔ)言又是Java平臺(tái)下一種面向?qū)ο蟮木幊陶Z(yǔ)言脖咐。它是一種動(dòng)態(tài)語(yǔ)言铺敌,其功能類似于Python,Ruby屁擅,Perl和Smalltalk偿凭。它可以用作Java平臺(tái)的腳本語(yǔ)言,動(dòng)態(tài)編譯為Java虛擬機(jī)(JVM)字節(jié)碼派歌,并與其他Java代碼和庫(kù)進(jìn)行互操作弯囊。

而Gradle的核心是基于Groovy的豐富的可擴(kuò)展的域特定語(yǔ)言(DSL)。Gradle通過(guò)提供可以根據(jù)需要進(jìn)行組合的聲明性語(yǔ)言元素將聲明式構(gòu)建推送到一個(gè)新的層次胶果。這些元素還為Java匾嘱,Groovy,OSGi稽物,Web和Scala項(xiàng)目提供了逐個(gè)常規(guī)的支持奄毡。更重要的是折欠,這種聲明性語(yǔ)言是可擴(kuò)展的贝或。添加您自己的新語(yǔ)言元素或增強(qiáng)現(xiàn)有的元素,從而提供簡(jiǎn)潔锐秦,可維護(hù)和易于理解的構(gòu)建咪奖。

所以我們看到的那些配置根本上可以理解為被Gradle封裝過(guò)的Groovy語(yǔ)言。
對(duì)于此要深入理解的話酱床,就需要我們深入其中去學(xué)習(xí)羊赵。但是我們要首先明確的是深入理解Android的Gradle

在這個(gè)基礎(chǔ)之后扇谣,我們緊接著去看看一個(gè)默認(rèn)創(chuàng)建出來(lái)的gradle大概會(huì)有哪些內(nèi)容

//這是一個(gè)添加了一些插件設(shè)置和依賴庫(kù)的build.gradle文件
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'//添加apt命令
android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "xxxx.com.newsframe"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    apt 'com.google.dagger:dagger-compiler:2.0.2'
    //指定注解處理器
    compile 'com.google.dagger:dagger:2.0.2'
    //dagger公用api
    provided 'org.glassfish:javax.annotation:10.0-b28'
    //添加android缺失的部分javax注解
    compile project(':hZDodo')
    compile project(':fRecyclerView')
}

然后我們跟隨者谷歌官方的配置構(gòu)建流程介紹去了解掌握


image.png

1昧捷、編譯器將您的源代碼轉(zhuǎn)換成 DEX(Dalvik Executable) 文件(其中包括運(yùn)行在 Android 設(shè)備上的字節(jié)碼),將所有其他內(nèi)容轉(zhuǎn)換成已編譯資源罐寨。
2靡挥、APK 打包器將 DEX 文件和已編譯資源合并成單個(gè) APK。不過(guò)鸯绿,必須先簽署 APK跋破,才能將應(yīng)用安裝并部署到 Android 設(shè)備上簸淀。
3、APK 打包器使用調(diào)試或發(fā)布密鑰庫(kù)簽署您的 APK:
a毒返、如果您構(gòu)建的是調(diào)試版本的應(yīng)用(即專用于測(cè)試和分析的應(yīng)用)租幕,打包器會(huì)使用調(diào)試密鑰庫(kù)簽署您的應(yīng)用。Android Studio 自動(dòng)使用調(diào)試密鑰庫(kù)配置新項(xiàng)目拧簸。
b劲绪、如果您構(gòu)建的是打算向外發(fā)布的發(fā)布版本應(yīng)用,打包器會(huì)使用發(fā)布密鑰庫(kù)簽署您的應(yīng)用盆赤。要?jiǎng)?chuàng)建發(fā)布密鑰庫(kù)珠叔,請(qǐng)閱讀在 Android Studio 中簽署您的應(yīng)用。
4弟劲、在生成最終 APK 之前祷安,打包器會(huì)使用 zipalign 工具對(duì)應(yīng)用進(jìn)行優(yōu)化,減少其在設(shè)備上運(yùn)行時(shí)的內(nèi)存占用兔乞。
構(gòu)建流程結(jié)束時(shí)汇鞭,您將獲得可用來(lái)進(jìn)行部署、測(cè)試的調(diào)試 APK庸追,或者可用來(lái)發(fā)布給外部用戶的發(fā)布 APK霍骄。

自定義構(gòu)建配置
Gradle 和 Android 插件可幫助您完成以下方面的構(gòu)建配置:
buildTypes
對(duì)應(yīng)上面的一個(gè)小例子我們可以看到有一個(gè)buildTypes(構(gòu)建類型),在buildTypes閉包(closure)里里有一個(gè)release閉包淡溯。
buildTypes定義 Gradle 在構(gòu)建和打包您的應(yīng)用時(shí)使用的某些屬性(需要梯子)通常針對(duì)開發(fā)生命周期的不同階段進(jìn)行配置读整。例如,調(diào)試構(gòu)建類型支持調(diào)試選項(xiàng)咱娶,使用調(diào)試密鑰簽署 APK米间;而發(fā)布構(gòu)建類型則可壓縮、混淆 APK 以及使用發(fā)布密鑰簽署 APK 進(jìn)行分發(fā)膘侮。您必須至少定義一個(gè)構(gòu)建類型才能構(gòu)建應(yīng)用——Android Studio 默認(rèn)情況下會(huì)創(chuàng)建debug and release build types (構(gòu)建類型)屈糊。

Dependencies
構(gòu)建系統(tǒng)管理來(lái)自您的本地文件系統(tǒng)以及來(lái)自遠(yuǎn)程存儲(chǔ)區(qū)的項(xiàng)目依賴項(xiàng)。這樣一來(lái)琼了,就不必手動(dòng)搜索逻锐、下載依賴項(xiàng)的二進(jìn)制文件包以及將它們復(fù)制到項(xiàng)目目錄內(nèi)。

ProGuard
構(gòu)建系統(tǒng)讓您能夠?yàn)槊總€(gè)構(gòu)建變體指定不同的 ProGuard 規(guī)則文件雕薪。構(gòu)建系統(tǒng)可在構(gòu)建過(guò)程中運(yùn)行 ProGuard 對(duì)類進(jìn)行壓縮和混淆處理昧诱。

defaultConfig
配置產(chǎn)品風(fēng)味(Configure Product Flavors)
創(chuàng)建產(chǎn)品風(fēng)味與創(chuàng)建構(gòu)建類型類似:只需將它們添加到 productFlavors {} 代碼塊并配置您想要的設(shè)置。產(chǎn)品風(fēng)味支持與 defaultConfig 相同的屬性所袁,這是因?yàn)?defaultConfig 實(shí)際上屬于 ProductFlavor 類盏档。這意味著,您可以在 defaultConfig {} 代碼塊中提供所有風(fēng)味的基本配置纲熏,每種風(fēng)味均可替換任何默認(rèn)值妆丘,例如 applicationId锄俄。

----簡(jiǎn)單而詳細(xì)的列舉了幾個(gè)build.gradle文件里的ScriptBuild-----
官方文檔里這樣給我們說(shuō)到:
創(chuàng)建自定義構(gòu)建配置需要您對(duì)一個(gè)或多個(gè)構(gòu)建配置文件(或 build.gradle 文件)進(jìn)行更改。這些純文本文件使用域特定語(yǔ)言 (DSL) 以 Groovy 語(yǔ)言描述和操作構(gòu)建邏輯勺拣,后者是一種適用于 Java 虛擬機(jī) (JVM) 的動(dòng)態(tài)語(yǔ)言奶赠。您無(wú)需了解 Groovy 便可開始配置構(gòu)建,因?yàn)?**Android Plugin for Gradle **引入了您需要的大多數(shù) DSL 元素药有。如需了解有關(guān) Android 插件 DSL 的更多信息毅戈,請(qǐng)閱讀 DSL 參考文檔

--------------未完待續(xù)----------------------------------------------------------

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末愤惰,一起剝皮案震驚了整個(gè)濱河市苇经,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宦言,老刑警劉巖扇单,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奠旺,居然都是意外死亡蜘澜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門响疚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鄙信,“玉大人,你說(shuō)我怎么就攤上這事忿晕∽肮睿” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵践盼,是天一觀的道長(zhǎng)鸦采。 經(jīng)常有香客問(wèn)我,道長(zhǎng)宏侍,這世上最難降的妖魔是什么赖淤? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任蜀漆,我火速辦了婚禮谅河,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘确丢。我一直安慰自己绷耍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布鲜侥。 她就那樣靜靜地躺著褂始,像睡著了一般。 火紅的嫁衣襯著肌膚如雪描函。 梳的紋絲不亂的頭發(fā)上崎苗,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天狐粱,我揣著相機(jī)與錄音,去河邊找鬼胆数。 笑死肌蜻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的必尼。 我是一名探鬼主播蒋搜,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼判莉!你這毒婦竟也來(lái)了豆挽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤券盅,失蹤者是張志新(化名)和其女友劉穎帮哈,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锰镀,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡但汞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了互站。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片私蕾。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖胡桃,靈堂內(nèi)的尸體忽然破棺而出踩叭,到底是詐尸還是另有隱情,我是刑警寧澤翠胰,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布容贝,位于F島的核電站,受9級(jí)特大地震影響之景,放射性物質(zhì)發(fā)生泄漏斤富。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一锻狗、第九天 我趴在偏房一處隱蔽的房頂上張望满力。 院中可真熱鬧,春花似錦轻纪、人聲如沸油额。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)潦嘶。三九已至,卻和暖如春崇众,著一層夾襖步出監(jiān)牢的瞬間掂僵,已是汗流浹背航厚。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锰蓬,地道東北人阶淘。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像互妓,于是被迫代替她去往敵國(guó)和親溪窒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

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