Kotlin+buildSrc更好的管理Gradle依賴譯文
前言
原文地址:Kotlin + buildSrc for Better Gradle Dependency Management
原文作者:Sam Edwards,Lead Android Engineer at Google Developer Expert for Android
為了充分利用Android Plugin for Gradle 3.0+的優(yōu)點(diǎn),將Android項(xiàng)目拆分成多個(gè)module的做法越來(lái)越常見。然而,隨著module數(shù)量的增多,我們很快就會(huì)遇到依賴管理的混亂問(wèn)題。
管理Gradle依賴的三種不同方法:
- 手動(dòng)管理
- 使用Google推薦的“ext”
- Kotlin + buildSrc
1.手動(dòng)管理
這是一種大多數(shù)人在采用的管理依賴的方法,但每次升級(jí)依賴庫(kù)時(shí)都需要做大量的手動(dòng)更改。
module_a/build.gradle
implementation "com.android.support:support-annotations:27.0.2" implementation "com.android.support:appcompat-v7:27.0.2" implementation "com.squareup.retrofit2:retrofit:2.3.0" implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0" implementation "io.reactivex.rxjava2:rxjava:2.1.9"
module_b/build.gradle
implementation "com.android.support:support-annotations:27.0.2" implementation "com.android.support:appcompat-v7:27.0.2" implementation "com.squareup.retrofit2:retrofit:2.3.0" implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0" implementation "io.reactivex.rxjava2:rxjava:2.1.9"
這里存在許多重復(fù)的配置,而且當(dāng)你的項(xiàng)目有很多module時(shí)很難管理依賴庫(kù)的版本更新。
2.Google推薦:使用gradle的extra屬性
Google在Android官方文檔中推薦這種管理依賴的方法。許多項(xiàng)目例如ButterKnife、Picasso等都在使用這種方法。
此方法非常適用于更新support library的版本,因?yàn)槊總€(gè)support library都具有相同的版本號(hào),你只需要在一個(gè)地方更改它就行了。 Retrofit等其它第三方庫(kù)也是如此。
Root-level build.gradle
ext { versions = [ support_lib: "27.0.2", retrofit: "2.3.0", rxjava: "2.1.9" ] libs = [ support_annotations: "com.android.support:support-annotations:${versions.support_lib}", support_appcompat_v7: "com.android.support:appcompat-v7:${versions.support_lib}", retrofit :"com.squareup.retrofit2:retrofit:${versions.retrofit}", retrofit_rxjava_adapter: "com.squareup.retrofit2:adapter-rxjava2:${versions.retrofit}", rxjava: "io.reactivex.rxjava2:rxjava:${versions.rxjava}" ] }
module_a/build.gradle
implementation libs.support_annotations implementation libs.support_appcompat_v7 implementation libs.retrofit implementation libs.retrofit_rxjava_adapter implementation libs.rxjava
module_b/build.gradle
implementation libs.support_annotations implementation libs.support_appcompat_v7 implementation libs.retrofit implementation libs.retrofit_rxjava_adapter implementation libs.rxjava
這種方法是手動(dòng)管理的一大進(jìn)步,但是缺少IDE的支持,更準(zhǔn)確的說(shuō)是在更新依賴庫(kù)的時(shí)候IDE不能自動(dòng)補(bǔ)全。
3.Kotlin + buildSrc == Android Studio Autocomplete ?? ??
您需要在您的項(xiàng)目里創(chuàng)建一個(gè)buildSrc模塊,然后編寫kotlin代碼來(lái)管理依賴庫(kù),使得IDE支持自動(dòng)補(bǔ)全。
Gradle文檔中有這樣一段話:
當(dāng)你運(yùn)行Gradle時(shí),它會(huì)檢查項(xiàng)目中是否存在一個(gè)名為buildSrc
的目錄。然后Gradle會(huì)自動(dòng)編譯并測(cè)試這段代碼,并將其放入構(gòu)建腳本的類路徑中。您不需要提供任何進(jìn)一步的操作提示。
你只需要在buildSrc module中新建兩個(gè)文件:
- build.gradle.kts
- 編寫Kotlin代碼的文件 (本文中是指
Dependencies.kt
)
buildSrc/build.gradle.kts:
plugins { `kotlin-dsl` }
buildSrc/src/main/java/Dependencies.kt
object Versions { val support_lib = "27.0.2" val retrofit = "2.3.0" val rxjava = "2.1.9" } object Libs { val support_annotations = "com.android.support:support-annotations:${Versions.support_lib}" val support_appcompat_v7 = "com.android.support:appcompat-v7:${Versions.support_lib}" val retrofit = "com.squareup.retrofit2:retrofit:${Versions.retrofit}" val retrofit_rxjava_adapter = "com.squareup.retrofit2:adapter-rxjava2:${Versions.retrofit}" val rxjava = "io.reactivex.rxjava2:rxjava:${Versions.rxjava}" }
經(jīng)過(guò)上面兩個(gè)步驟后,執(zhí)行一次Gradle Sync任務(wù),現(xiàn)在我們可以在Android Studio中訪問(wèn)Dependencies.kt中任何值了。
看起來(lái)結(jié)果與“ext”非常相似,但是它支持自動(dòng)補(bǔ)全和單擊跳轉(zhuǎn)。
module_a/build.gradle
implementation Libs.support_annotations implementation Libs.support_appcompat_v7 implementation Libs.retrofit implementation Libs.retrofit_rxjava_adapter implementation Libs.rxjava
module_a/build.gradle
implementation Libs.support_annotations implementation Libs.support_appcompat_v7 implementation Libs.retrofit implementation Libs.retrofit_rxjava_adapter implementation Libs.rxjava
小結(jié)
我強(qiáng)烈推薦您使用“Kotlin + buildSrc”的方法。它支持自動(dòng)補(bǔ)全和單擊跳轉(zhuǎn),使得您無(wú)需在文件之間手動(dòng)來(lái)回切換,方便你更好的管理Gradle依賴。
動(dòng)手實(shí)踐:
新建的module名稱必須為buildSrc
一開始我按照作者原文的描述,在Android Studio里右鍵單擊項(xiàng)目,New 出一個(gè)名為buildSrc的Android Library,試了好幾遍都提示“Gradle sync failed: Plugin with id 'com.android.library' not found”的錯(cuò)誤。
后來(lái)我參考這里的做法,手動(dòng)創(chuàng)建了buildSrc這個(gè)模塊。步驟如下:
1.在項(xiàng)目根目錄下新建一個(gè)名為buildSrc的文件夾(與項(xiàng)目里的app文件夾同級(jí))。
2.在buildSrc文件夾里創(chuàng)建名為build.gradle.kts的文件,文件內(nèi)容參考之前的描述。
3.在buildSrc文件夾里創(chuàng)建src/main/java文件夾,如下圖所示。并在該文件夾下創(chuàng)建Dependencies.kt文件,文件內(nèi)容參考之前的描述。
4. build一遍你的項(xiàng)目,然后重啟你的Android Studio,項(xiàng)目里就會(huì)多出一個(gè)名為buildSrc的module。
以上就是Kotlin+buildSrc更好的管理Gradle依賴譯文的詳細(xì)內(nèi)容,更多關(guān)于Kotlin+buildSrc管理Gradle依賴的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android WebView使用方法詳解 附j(luò)s交互調(diào)用方法
這篇文章主要為大家詳細(xì)介紹了Android WebView使用方法詳解,文中附j(luò)s交互調(diào)用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05Android實(shí)現(xiàn)本地圖片選擇及預(yù)覽縮放效果
這篇文章主要為大家詳細(xì)介紹了Android仿春雨醫(yī)生,實(shí)現(xiàn)本地圖片選擇及預(yù)覽縮放效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Android實(shí)現(xiàn)簡(jiǎn)單的popupwindow提示框
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單的popupwindow提示框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10Android Studio新建工程默認(rèn)在build.gradle中加入maven阿里源的問(wèn)題
這篇文章主要介紹了Android Studio新建工程默認(rèn)在build.gradle中加入maven阿里源的問(wèn)題,本文通過(guò)實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03AndroidStudio kotlin配置詳細(xì)介紹
這篇文章主要介紹了AndroidStudio kotlin配置詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-05-05一文讀懂Android?Kotlin的數(shù)據(jù)流
這篇文章主要介紹了一文讀懂Android?Kotlin的數(shù)據(jù)流,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07Android如何監(jiān)測(cè)文件夾內(nèi)容變化詳解
最近在開發(fā)android應(yīng)用程序的時(shí)候遇到了一個(gè)監(jiān)測(cè)文件夾的功能,所以下面這篇文章主要給大家介紹了關(guān)于Android如何監(jiān)測(cè)文件夾內(nèi)容變化的相關(guān)資料,需要的朋友可以參考下2021-12-12Android端內(nèi)數(shù)據(jù)狀態(tài)同步方案VM-Mapping詳解
這篇文章主要介紹了Android端內(nèi)數(shù)據(jù)狀態(tài)同步方案VM-Mapping詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09