網站首頁 編程語言 正文
前言
原文地址:Kotlin + buildSrc for Better Gradle Dependency Management
原文作者:Sam Edwards,Lead Android Engineer at Google Developer Expert for Android
為了充分利用Android Plugin for Gradle 3.0+的優點,將Android項目拆分成多個module的做法越來越常見。然而,隨著module數量的增多,我們很快就會遇到依賴管理的混亂問題。
管理Gradle依賴的三種不同方法:
- 手動管理
- 使用Google推薦的“ext”
- Kotlin + buildSrc
1.手動管理
這是一種大多數人在采用的管理依賴的方法,但每次升級依賴庫時都需要做大量的手動更改。
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"
這里存在許多重復的配置,而且當你的項目有很多module時很難管理依賴庫的版本更新。
2.Google推薦:使用gradle的extra屬性
Google在Android官方文檔中推薦這種管理依賴的方法。許多項目例如ButterKnife、Picasso等都在使用這種方法。
此方法非常適用于更新support library的版本,因為每個support library都具有相同的版本號,你只需要在一個地方更改它就行了。 Retrofit等其它第三方庫也是如此。
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
這種方法是手動管理的一大進步,但是缺少IDE的支持,更準確的說是在更新依賴庫的時候IDE不能自動補全。
3.Kotlin + buildSrc == Android Studio Autocomplete ?? ??
您需要在您的項目里創建一個buildSrc模塊,然后編寫kotlin代碼來管理依賴庫,使得IDE支持自動補全。
Gradle文檔中有這樣一段話:
當你運行Gradle時,它會檢查項目中是否存在一個名為buildSrc
的目錄。然后Gradle會自動編譯并測試這段代碼,并將其放入構建腳本的類路徑中。您不需要提供任何進一步的操作提示。
你只需要在buildSrc module中新建兩個文件:
- 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}" }
經過上面兩個步驟后,執行一次Gradle Sync任務,現在我們可以在Android Studio中訪問Dependencies.kt中任何值了。
看起來結果與“ext”非常相似,但是它支持自動補全和單擊跳轉。
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
小結
我強烈推薦您使用“Kotlin + buildSrc”的方法。它支持自動補全和單擊跳轉,使得您無需在文件之間手動來回切換,方便你更好的管理Gradle依賴。
動手實踐:
新建的module名稱必須為buildSrc
一開始我按照作者原文的描述,在Android Studio里右鍵單擊項目,New 出一個名為buildSrc的Android Library,試了好幾遍都提示“Gradle sync failed: Plugin with id 'com.android.library' not found”的錯誤。
后來我參考這里的做法,手動創建了buildSrc這個模塊。步驟如下:
1.在項目根目錄下新建一個名為buildSrc的文件夾(與項目里的app文件夾同級)。
2.在buildSrc文件夾里創建名為build.gradle.kts的文件,文件內容參考之前的描述。
3.在buildSrc文件夾里創建src/main/java文件夾,如下圖所示。并在該文件夾下創建Dependencies.kt文件,文件內容參考之前的描述。
4. build一遍你的項目,然后重啟你的Android Studio,項目里就會多出一個名為buildSrc的module。
原文鏈接:https://juejin.cn/post/6844903615346245646#heading-0
相關推薦
- 2022-06-07 ASP.NET?Core應用啟動Startup類簡介_基礎應用
- 2023-03-18 git?push?origin?HEAD:refs/for/master?的意思分析_其它綜合
- 2022-05-05 python?scipy.spatial.distance?距離計算函數??_python
- 2022-08-05 處理“URIError: URI malformed“的辦法
- 2022-09-08 Go語言里切片slice的用法介紹_Golang
- 2022-11-14 Swift?指針底層探索分析_Swift
- 2022-03-16 C#?程序通用結構_C#教程
- 2022-08-02 源碼解析python中randint函數的效率缺陷_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支