Android studio里ext中的$rootProject的總結

1. 常見用法

1. 在ext這個map中放字符串或者基本數(shù)據類型

在android的rootProject的build.gradle中众羡,定義如下代碼塊

ext {

? ? compileSdkVersion = 25

? ? buildToolsVersion = "26.0.0"

? ? minSdkVersion = 14

? ? targetSdkVersion = 22

? ? appcompatV7 = "com.android.support:appcompat-v7:$androidSupportVersion"

}

然后在app模塊下窖剑,通過

rootProject.ext.compileSdkVersionrootProject.ext.buildToolsVersion

這種方式來訪問在根目錄build.gradle下定義的變量消略。

2. 在ext這個map中再map

新建一個config.gradle文件

在里面填充

ext {

? ? //創(chuàng)建了一個名為android的瘪菌,類型為map的變量般此,groovy中可以用[]來創(chuàng)建map類型朦肘。那么就是一個map下面又創(chuàng)? ?

? ? //建了一個map担映,且名字叫做android砍濒。

? ? android = [

? ? ? ? ? ? compileSdkVersion: 23,

? ? ? ? ? ? buildToolsVersion: "23.0.2",

? ? ? ? ? ? minSdkVersion? ? : 14,

? ? ? ? ? ? targetSdkVersion : 22,

? ? ]

? ? dependencies = [

? ? ? ? ? ? appcompatV7': 'com.android.support:appcompat-v7:23.2.1',

? ? ? ? ? ? design? ? ? : 'com.android.support:design:23.2.1'

? ? ]

}

然后在根目錄的build.gradle的頭部應用這個腳本:

apply from: "config.gradle"

那么在app/build.gradle中淋肾,可以直接這樣用:

android {

? ? compileSdkVersion rootProject.ext.android.compileSdkVersion

? ? buildToolsVersion rootProject.ext.buildToolsVersion

? ? defaultConfig {

? ? ? ? applicationId "com.wuxiaolong.gradle4android"

? ? ? ? minSdkVersion rootProject.ext.android.minSdkVersion

? ? ? ? targetSdkVersion rootProject.ext.android.targetSdkVersion

? ? ? ? versionCode 1

? ? ? ? versionName "1.0"

? ? }


...

dependencies {

? ? compile fileTree(dir: 'libs', include: ['*.jar'])

? ? testCompile 'junit:junit:4.12'

? ? compile rootProject.ext.dependencies.appcompatV7

? ? compile rootProject.ext.dependencies.design

}

3. 在ext這個map中放入函數(shù)類型的變量

//用{}來創(chuàng)建函數(shù)類型對象,即閉包爸邢,賦值給變量myMethodext.myMethod = { param1, param2 ->? ? // 閉包體}

比如在rootProject中創(chuàng)建樊卓,那么任何一個其他的project對象都可以通過下面的方式訪問到這個方法。

rootProject.ext.myMethod("1","2")

2. 是什么:

根據ext屬性的官方文檔杠河,ext屬性是ExtensionAware類型的一個特殊的屬性碌尔,本質是一個Map類型的變量,而

ExtentionAware接口的實現(xiàn)類為Project,Settings,Task,SourceSet等券敌,ExtentionAware可以在運行時擴充屬性唾戚,而這里的ext,就是里面的一個特殊的屬性而已待诅。如下圖:

關于ExtensionAware的大概的解釋:該接口的子類型為Project,Settings,Task,SourceSet叹坦,他們都有一個變量叫做extensions(我猜想該變量也是一個類似map的實現(xiàn)原理),可以往該變量中放置屬性卑雁。

3. 使用ext屬性的優(yōu)勢

用ext屬性募书,和直接在build.gradle中用def定義變量的好處是什么?

ext屬性可以伴隨對應的ExtensionAware對象在構建的過程中被其他對象訪問测蹲,例如你在rootProject中聲明的ext中添加的內容莹捡,就可以在任何能獲取到rootProject的地方訪問這些屬性,而如果只在rootProject/build.gradle中用def來聲明這些變量扣甲,那么這些變量除了在這個文件里面訪問之外篮赢,其他任何地方都沒辦法訪問。

這是因為在build.gradle中直接定義的屬性文捶,只是作為gradle構建的生命周期中的Configuration階段的局部變量而已(我在Gradle構建的生命周期和其對象的理解中猜想該階段是在執(zhí)行Project對象的構造函數(shù))荷逞,而往ext屬性中寫入變量,則可以在整個構建的生命周期都訪問到那些變量粹排。

此外要注意,ext屬性是屬于擁有他的相應的對象的涩澡,比如Project對象顽耳,因此只要能訪問到對應的Project對象,就能訪問到對應的ext屬性

thanks:

http://wuxiaolong.me/2016/03/31/gradle4android2/

https://stackoverflow.com/questions/37186108/gradle-def-vs-ext

https://stackoverflow.com/questions/27777591/how-to-define-and-call-custom-methods-in-build-gradle?noredirect=1&lq=1

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市射富,隨后出現(xiàn)的幾起案子膝迎,更是在濱河造成了極大的恐慌,老刑警劉巖胰耗,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件限次,死亡現(xiàn)場離奇詭異,居然都是意外死亡柴灯,警方通過查閱死者的電腦和手機卖漫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赠群,“玉大人羊始,你說我怎么就攤上這事〔槊瑁” “怎么了突委?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冬三。 經常有香客問我匀油,道長,這世上最難降的妖魔是什么勾笆? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任敌蚜,我火速辦了婚禮,結果婚禮上匠襟,老公的妹妹穿的比我還像新娘钝侠。我一直安慰自己,他們只是感情好酸舍,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布帅韧。 她就那樣靜靜地躺著,像睡著了一般啃勉。 火紅的嫁衣襯著肌膚如雪忽舟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天淮阐,我揣著相機與錄音叮阅,去河邊找鬼。 笑死泣特,一個胖子當著我的面吹牛浩姥,可吹牛的內容都是我干的。 我是一名探鬼主播状您,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼勒叠,長吁一口氣:“原來是場噩夢啊……” “哼兜挨!你這毒婦竟也來了?” 一聲冷哼從身側響起眯分,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤拌汇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弊决,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體噪舀,經...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年飘诗,在試婚紗的時候發(fā)現(xiàn)自己被綠了与倡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡疚察,死狀恐怖蒸走,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情貌嫡,我是刑警寧澤比驻,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站岛抄,受9級特大地震影響别惦,放射性物質發(fā)生泄漏。R本人自食惡果不足惜夫椭,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一掸掸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹭秋,春花似錦扰付、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洞豁,卻和暖如春盐固,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丈挟。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工刁卜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人曙咽。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓蛔趴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親例朱。 傳聞我的和親對象是個殘疾皇子夺脾,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容