為了充分利用Android Plugin for Gradle 3.0+
的優(yōu)點(diǎn)琐谤,將Android項(xiàng)目拆分成多個(gè)module的做法越來(lái)越常見(jiàn)磕蒲。然而蓖乘,隨著module數(shù)量的增多,我們很快就會(huì)遇到依賴(lài)管理的混亂問(wèn)題峦睡。
管理Gradle依賴(lài)的三種不同方法:
- 手動(dòng)管理
- 使用Google推薦的
“ext”
Kotlin + buildSrc
1翎苫、手動(dòng)管理
這是一種大多數(shù)人在采用的管理依賴(lài)的方法,但每次升級(jí)依賴(lài)庫(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í)很難管理依賴(lài)庫(kù)的版本更新。
Google推薦:使用gradle的extra屬性
Google在Android官方文檔中推薦這種管理依賴(lài)的方法龙屉。許多項(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)步鳍咱,但是缺少I(mǎi)DE的支持,更準(zhǔn)確的說(shuō)是在更新依賴(lài)庫(kù)的時(shí)候IDE不能自動(dòng)補(bǔ)全与柑。
Kotlin + buildSrc == Android Studio Autocomplete ?? ??
您需要在您的項(xiàng)目里創(chuàng)建一個(gè)buildSrc
模塊谤辜,然后編寫(xiě)kotlin代碼來(lái)管理依賴(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)建腳本的類(lèi)路徑中脯倚。您不需要提供任何進(jìn)一步的操作提示。
你只需要在buildSrc module中新建兩個(gè)文件:
build.gradle.kts
- 編寫(xiě)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é)束語(yǔ)
我強(qiáng)烈推薦您使用“Kotlin + buildSrc”
的方法。它支持自動(dòng)補(bǔ)全和單擊跳轉(zhuǎn)尼夺,使得您無(wú)需在文件之間手動(dòng)來(lái)回切換尊残,方便你更好的管理Gradle依賴(lài)。
動(dòng)手實(shí)踐:
新建的module名稱(chēng)必須為buildSrc
一開(kāi)始我按照作者原文的描述淤堵,在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)容參考之前的描述。
- build一遍你的項(xiàng)目,然后重啟你的Android Studio贵扰,項(xiàng)目里就會(huì)多出一個(gè)名為
buildSr
c的module仇穗。
文末
您的點(diǎn)贊收藏就是對(duì)我最大的鼓勵(lì)!
歡迎關(guān)注我戚绕,分享Android干貨纹坐,交流Android技術(shù)。
更多Kotlin 可以查看我的個(gè)人介紹N璐浴T抛印!