gradle新的依賴(lài)方式你真的了解嗎?

在 gradle3.0之前,gradle 依賴(lài)項(xiàng)目配置有 compile,apk,provided三種方式

  1. compile:指定編譯時(shí)依賴(lài)項(xiàng)舰蟆。Gradle 將此配置的依賴(lài)項(xiàng)添加到類(lèi)路徑和應(yīng)用的 APK。這是默認(rèn)配置访忿。

  2. apk: 指定 Gradle 需要將其與應(yīng)用的 APK 一起打包的僅運(yùn)行時(shí)依賴(lài)項(xiàng)荒典。您可以將此配置與 JAR 二進(jìn)制依賴(lài)項(xiàng)一起使用舌稀,而不能與其他庫(kù)模塊依賴(lài)項(xiàng)或 AAR 二進(jìn)制依賴(lài)項(xiàng)一起使用厢呵。

  3. provided:指定 Gradle 不與應(yīng)用的 APK 一起打包的編譯時(shí)依賴(lài)項(xiàng)。如果運(yùn)行時(shí)無(wú)需此依賴(lài)項(xiàng)蝶缀,這將有助于縮減 APK 的大小丹喻。您可以將此配置與 JAR 二進(jìn)制依賴(lài)項(xiàng)一起使用,而不能與其他庫(kù)模塊依賴(lài)項(xiàng)或 AAR 二進(jìn)制依賴(lài)項(xiàng)一起使用翁都。

20171130203447062.png

從上面截圖可以看到,在AS 的 project structure的添加 dependency 界面,你會(huì)看到每個(gè) dependency 后面可以致命 scope, 因?yàn)槲业?gradle 是3.0版本,compile,apk,provided 這三種依賴(lài)方式已經(jīng) deprecated. 取而代之的implementation, api, compileOnly, and runtimeOnly幾種方式

那新舊之間有什么不同呢?

gradle3.0之前的 build.gradle 文件是這樣的,依賴(lài)項(xiàng)目默認(rèn)都是通過(guò)compile

20171130210701739.png

而gradle3.0后,module 下的build.gradle 項(xiàng)目依賴(lài)可以是這樣子

20171130210345047.png

gradle3.0或者以上版本 3.0之前(deprecated) 說(shuō)明 作用
implementation compile gradle升級(jí)到3.0之后,新增了 implementation, 而compile 方式被標(biāo)記為了deprecated, compile 在3.0之后仍然可以使用,但是 gradle 官方說(shuō)會(huì)在 gradle 后續(xù)的某次重要升級(jí)后變?yōu)椴豢捎? 如果我們使用了implementation方式來(lái)依賴(lài)項(xiàng)目的話,那么這個(gè)庫(kù)就在編譯時(shí)期,只對(duì)當(dāng)前的module可見(jiàn),對(duì)其他的module不可見(jiàn),但是在運(yùn)行使其是可見(jiàn)的,這種方式的好處是可以顯著減少 build項(xiàng)目的時(shí)間,因?yàn)榧偃缭撘蕾?lài)庫(kù)有接口或者代碼變動(dòng),那么Gradle只會(huì)去重新編譯和它有直接依賴(lài)關(guān)系的module,也就是該庫(kù)不存在傳遞性
api compile 同上 使用api方式來(lái)依賴(lài)項(xiàng)目或者庫(kù)的話,那么這個(gè)庫(kù),在編譯時(shí)期和運(yùn)行時(shí)期都可以對(duì)其他module可見(jiàn)
compileOnly provided 3.0之后版本,使用compileOnly來(lái)替代provided 假如在項(xiàng)目中,對(duì)某些庫(kù)你只是想要在編譯時(shí)期使用,而在運(yùn)行時(shí)期并不需要這個(gè)庫(kù),你可以使用這種方式!
runtimeOnly apk 3.0之后,使用 runtinmeOnly來(lái)替代apk Gradle 在運(yùn)行時(shí)會(huì)將該庫(kù)添加到 build 的 output 中去

也許到此刻,有些同學(xué)還是處于懵懵懂懂的狀態(tài),下面讓我以幾個(gè)例子來(lái)詳細(xì)說(shuō)明他們的作用

20171130220450373.png

在我的項(xiàng)目里共有 app,common,factory,lang這4個(gè)module
他們的依賴(lài)關(guān)系是 [app->factory->common->lang]

那么此時(shí)如果我的 common這個(gè) module中使用 implementation 來(lái)引入 gson 庫(kù),那么在 factory 和 app 這兩個(gè) module中,你是無(wú)法是用Gson 的,編譯時(shí)期是無(wú)法找到這個(gè)類(lèi)的,implementation 不具有傳遞性,如果使用 api 或者 compile 來(lái)引入 gson 庫(kù),便可以在 app 和 factory 中直接使用 gson 庫(kù),而不必再次引入.


什么時(shí)候用到 compileOnly呢?

我們?cè)陂_(kāi)發(fā)的時(shí)候,如果想要查看 PhoneWindow ,WindowManager 這些 framework 層的代碼,可以將 sdk 中的 platforms中的 android.jar 放入 lib 文件夾中,然后add as Library,此時(shí)會(huì)在 build.gradle 文件中生成一句
implementation files('libs/android.jar')
我們可以將 implementation替換為 compileOnly,此時(shí)就可以查看 PhoneWindow 這些 framework 層的源碼了

以上如有錯(cuò)誤,請(qǐng)多指教!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碍论,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子柄慰,更是在濱河造成了極大的恐慌鳍悠,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坐搔,死亡現(xiàn)場(chǎng)離奇詭異藏研,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)概行,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)蠢挡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人凳忙,你說(shuō)我怎么就攤上這事业踏。” “怎么了涧卵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵勤家,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我柳恐,道長(zhǎng)伐脖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任乐设,我火速辦了婚禮讼庇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伤提。我一直安慰自己巫俺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布肿男。 她就那樣靜靜地躺著介汹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舶沛。 梳的紋絲不亂的頭發(fā)上嘹承,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音如庭,去河邊找鬼叹卷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛坪它,可吹牛的內(nèi)容都是我干的骤竹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼往毡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蒙揣!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起开瞭,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤懒震,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嗤详,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體个扰,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年葱色,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了递宅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苍狰,死狀恐怖恐锣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情舞痰,我是刑警寧澤土榴,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布片效,位于F島的核電站撬呢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏乌询。R本人自食惡果不足惜呀打,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一矢赁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贬丛,春花似錦撩银、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)够庙。三九已至,卻和暖如春抄邀,著一層夾襖步出監(jiān)牢的瞬間耘眨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工境肾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剔难,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓奥喻,卻偏偏與公主長(zhǎng)得像偶宫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子环鲤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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