安卓工程依賴方式:Implementation vs API dependency

升級到 Android studio 3.0版本會使多Module工程的構(gòu)建速度加快很多击罪。不幸的是,這也帶來了Gradle 插件版本API的較大變化补君。本文將會詳細(xì)指出這個變化帶來的好處矿辽,并且指導(dǎo)讀者怎么去升級竞膳。

ps: Android plugin 3.0.0搭配Gradle 3.4版本以上

原英文文章鏈接

問題現(xiàn)狀

為了理解老版本Gradle plugin 2.0構(gòu)建系統(tǒng)的限制渗钉,這里假設(shè)有個工程使用了多層module依賴方式彤恶。請看下圖。

對于最底部的基礎(chǔ)module,其將會有兩種可能的變化:

1. Implementation 變化:不會改動本module對外暴露的接口声离。

2. Application binary interface (ABI) 變化:將會改變本module對外暴露的接口

本module指的是調(diào)用dependency的module

注意歇竟,所有需要重新編譯的module將會用紅色標(biāo)出。

Implementation 變化

當(dāng)本module依賴的ib(也可以是module)發(fā)生變化時抵恋,由于本module對外暴露的接口并不發(fā)生變化,在構(gòu)建工程時gradle將會只重新編譯本module宝磨,所有依賴于本module的module并不會發(fā)生編譯弧关。這種情況是沒什么問題的。如圖所示唤锉。

ABI變化

當(dāng)本module依賴的ib(也可以是module)發(fā)生變化時世囊,本module向外暴露的接口發(fā)生了變化,那么所有直接依賴于本module的module將不得不重新編譯窿祥。

接下來株憾,這些上層module可能通過其本身的接口對外暴露了底層module的部分內(nèi)容,即意味著本module暴露的接口也發(fā)生了變化晒衩,這會使得依賴于上層module的上上層module也需要重新編譯嗤瞎。這就導(dǎo)致了一個連鎖效應(yīng),因此听系,為了絕對的安全起見贝奇,gradle將不得不重新編譯整個工程,使得編譯時間變得較長靠胜。如圖所示掉瞳。

那么重點來了:一點代碼的改動可能會引起整個工程的重新編譯,這將是多么悲催浪漠,而實際上我們之前的gradle插件2.0版本系列的確如此陕习,根本原因就是gradle壓根不知道暴露的接口可以通過一個接一個的依賴傳遞影響整個工程。

Android Gradle plugin 3.0帶來了解決方案

最新版的Gradle plugin需要你指出一個module的接口是否對外暴露其依賴lib的接口址愿「昧停基于此,可以讓項目構(gòu)建時必盖,gradle可以判斷哪個需要重新編譯拌牲。因此,老版本的構(gòu)建關(guān)鍵字compile被廢棄了歌粥,而是改成了這兩個:

api:同compile作用一樣塌忽,即認(rèn)為本module將會泄露其依賴的module的內(nèi)容。

implementation:本module不會通過自身的接口向外部暴露其依賴module的內(nèi)容失驶。

由此土居,我們可以明確的告訴gradle去重新編譯一個module,若是這個使用的module的接口發(fā)生變化的話。

dependencies {

//當(dāng)legofy接口發(fā)生變化時擦耀,需要重新編譯本module以及所有使用本module的module

api project(':legofy')

// 僅當(dāng)landscapevideocamera發(fā)生變化時棉圈,重新編譯本module

implementation project(':landscapevideocamera:1.0.0')

}

遷移指南

理論上,你可以將原來工程中的compile完全替換為現(xiàn)在的api眷蜓,但是一旦依賴發(fā)生變化分瘾,將會使所有的module重新編譯,造成編譯過長吁系。

所以更好的方式就是使用implementation來進行依賴德召,這會大大改善工程的構(gòu)建時間。只有你明確要向外部暴露所依賴lib的接口時汽纤,才需要使用api依賴上岗,整體來說,會減少很多重新編譯蕴坪。這一點肴掷,在官方指南中說的比較明確。

其它的變化

既然有了比較大的改變背传,索性官方團隊利用此機會改了更多配置屬性的名字呆瞻,

比如provided改成了compileOnly,apk改成了runtimeOnly

大體如上续室,詳情可參考官方遷移指南

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末栋烤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挺狰,更是在濱河造成了極大的恐慌明郭,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丰泊,死亡現(xiàn)場離奇詭異薯定,居然都是意外死亡,警方通過查閱死者的電腦和手機瞳购,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門话侄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人学赛,你說我怎么就攤上這事年堆。” “怎么了盏浇?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵变丧,是天一觀的道長。 經(jīng)常有香客問我绢掰,道長痒蓬,這世上最難降的妖魔是什么童擎? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮攻晒,結(jié)果婚禮上顾复,老公的妹妹穿的比我還像新娘。我一直安慰自己鲁捏,他們只是感情好芯砸,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著给梅,像睡著了一般乙嘀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上破喻,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音盟榴,去河邊找鬼曹质。 笑死,一個胖子當(dāng)著我的面吹牛擎场,可吹牛的內(nèi)容都是我干的羽德。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼迅办,長吁一口氣:“原來是場噩夢啊……” “哼宅静!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起站欺,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤姨夹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后矾策,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體磷账,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年贾虽,在試婚紗的時候發(fā)現(xiàn)自己被綠了逃糟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蓬豁,死狀恐怖绰咽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情地粪,我是刑警寧澤取募,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站驶忌,受9級特大地震影響矛辕,放射性物質(zhì)發(fā)生泄漏笑跛。R本人自食惡果不足惜聊品,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一飞蹂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翻屈,春花似錦陈哑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厘贼,卻和暖如春界酒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘴秸。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工毁欣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岳掐。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓凭疮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親串述。 傳聞我的和親對象是個殘疾皇子执解,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)纲酗,斷路器衰腌,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 目錄 在Android Studio 3.0下創(chuàng)建項目使用Kotlin Gradle統(tǒng)一依賴版本 Gradle 3...
    KevinChiu閱讀 1,784評論 0 0
  • we acknowledge that,and don't expect everyone to t...
    吳黃龍本人閱讀 228評論 0 0