本文介紹的的最新的一種方式 Version Catalogs
间学。好了,廢話不多說淹办,我們開始學(xué)習(xí)這一種項目統(tǒng)一依賴方式。
介紹
需要注意的是恶复,這個方式是在 Gradle7.0
以上使用的(經(jīng)過測試怜森,必要要 gradle 7.4.2
以上版本才能解析)速挑。如果當(dāng)前的應(yīng)用小于這個版本,建議采用別的方式副硅。當(dāng)時可以往下看學(xué)習(xí)學(xué)習(xí)姥宝。
首先,提供 《官方文檔 - version catalogs 》給到大家恐疲,還是建議大家先看一下官方文檔腊满,當(dāng)然都是英文,可以翻譯看看培己,然后再回來看這篇文章會事半功倍碳蛋。當(dāng)然如果直接看也沒有關(guān)系。
實現(xiàn)方式
本文主要介紹 version catalogs
項目統(tǒng)一依賴管理的兩種實現(xiàn)方式省咨。分別是:
- 直接在項目的
setting.gradle
文件當(dāng)中實現(xiàn)- 新建一個
.toml
后綴文件實現(xiàn)
據(jù)了解肃弟,目前這個方式還是預(yù)覽版本,所以需要在 項目的 setting.gradle
文件當(dāng)中手動開啟:
// VERSION_CATALOGS當(dāng)前并不是穩(wěn)定版本功能
// 所以需要預(yù)先開啟功能預(yù)覽 enableFeaturePreview('FEATURE')
enableFeaturePreview("VERSION_CATALOGS")
方式一:
在項目的setting.gradle
文件當(dāng)中零蓉,所有代碼如下:
//settings.gradle
pluginManagement {
repositories {
google()
mavenCentral()
gradlePluginPortal()
maven { url "https://jitpack.io" }
}
}
// VERSION_CATALOGS當(dāng)前并不是穩(wěn)定版本功能
// 所以需要預(yù)先開啟功能預(yù)覽 enableFeaturePreview('FEATURE')
enableFeaturePreview("VERSION_CATALOGS")
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
gradlePluginPortal()
google()
mavenCentral()
maven { url "https://jitpack.io" }
}
versionCatalogs{
libs{
version('compileSdk','33')
version('minSdk','21')
version('targetSdk','32')
version('coreKtx','1.7.0')
version('appcompat','1.3.0')
version('material','1.4.0')
version('constraintLayout','2.1.3')
......
alias('imp_coreKtx').to('androidx.core','core-ktx').versionRef('coreKtx')
alias('imp_appcompat').to('androidx.appcompat','appcompat').versionRef('appcompat')
alias('imp_material').to('com.google.android.material','material').versionRef('material')
alias('imp_constraintLayout').to('androidx.constraintlayout','constraintLayout').versionRef('constraintLayout')
......
//組合
bundle('android_base',['imp_coreKtx','imp_appcompat','imp_material'])
}
}
}
rootProject.name = "LeoDevMvpKotlinDemo"
include ':app
include ':lib_fast_dev_mvp_kt'
我們只需要在 dependencyResolutionManagement
增加代碼即可笤受,下面我們來解釋一下如何使用的:
version():
顧名思義,這個是寫版本號的敌蜂, version(‘名字’箩兽,‘版本號’)。alias().to().versionRef():
這個就是導(dǎo)依賴的路徑設(shè)置章喉, alias('名字').to('依賴路徑').versionRef('版本號名稱')比肄。bundle():
組合,將已經(jīng)定義的依賴組合到一起囊陡,可理解為依賴數(shù)組芳绩。bundle(名字',['依賴名字','依賴名字'])
其中,如果不定義version版本號撞反,那么可以直接寫成:
alias('imp_coreKtx').to('androidx.core','core-ktx').version('1.7.0)
不過還是建議大家分開來妥色,統(tǒng)一下version版本號。這里再舉例一下怎拆分遏片,例如嘹害,我們需要導(dǎo)入一個依賴:
implementation 'androidx.appcompat:appcompat:1.3.0'
那么我們就可拆分成這樣:
version('version_appcompat','1.3.0')
alias('imp_appcompat').to('androidx.appcompat','appcompat').versionRef('version_appcompat')
這就是第一種編寫方式,但是這種方式有一種弊端吮便,當(dāng)我們項目依賴越來越多的時候笔呀,dependencyResolutionManagement
這個方法就會越來越長。并且這個 setting.gradle
不止單單放我們的導(dǎo)入依賴的代碼髓需,也有我們導(dǎo)入庫的地址代碼等等许师,不夠單一。
所以我們有了第二種,創(chuàng)建一個單獨文件的方式微渠。
方式二:
在項目的根目錄下(也就是 setting.gradle
同級目錄)搭幻,創(chuàng)建一個后綴名為 .toml
的文件,名字自定逞盆,我這里創(chuàng)建了 project.version.toml
的文件檀蹋,如下圖:
文件里面代碼如下:
//project.version.toml
[versions]
compileSdk = "33"
minSdk = "21"
targetSdk = "32"
versionCode = "1"
versionName = "1.0.0"
coreKtx = "1.7.0"
appcompat = "1.3.0"
material = "1.4.0"
constraintlayout = "2.1.3"
[libraries]
coreKtx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" }
appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
material = { module = "com.google.android.material:material", version.ref = "material"}
constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" }
[bundles]
andorid_base = ["coreKtx","appcompat","material","constraintlayout"]
[plugins]
application = { id = "com.android.application"}
這里主要分為四個部分,[versions]
,[libraries]
,[bundles]
,[plugins]
云芦。分別為[版本]
俯逾,[依賴]
,[組合]
舅逸,[插件]
纱昧。我們直接照搬就好。經(jīng)過測試第四個[plugins]
不太穩(wěn)定堡赔,有時候會報錯识脆,可不寫。
我們文件創(chuàng)建好善已,編碼完畢之后呢灼捂,需要在我們方法一的地方增加一行代碼,導(dǎo)入我們新建的這個文件换团。代碼如下:
//setting.gradle
dependencyResolutionManagement {
versionCatalogs {
libs {
from(files("./project.verisons.toml"))
}
}
}
其實也就是將我們方法一里面的所有代碼悉稠,寫到了單獨的文件里面,然后再單獨導(dǎo)入這個文件艘包。
具體使用
兩種方式的實現(xiàn)的猛,使用方法都是一樣的。我們在項目的 build.gradle
文件里面就可以直接寫入代碼啦想虎。寫之前記得點擊一下 死丟丟 的那個小象卦尊。重新構(gòu)建一下項目。
當(dāng) 死丟丟 構(gòu)建完畢之后哦舌厨,我們就可以去到項目的 build.gradle
文件里 coding 啦岂却,使用如下:
android {
namespace 'leo.dev.mvp.kt'
compileSdk libs.versions.compileSdk.get().toInteger()
defaultConfig {
applicationId "leo.dev.mvp.kt"
minSdk libs.versions.minSdk.get().toInteger()
targetSdk libs.versions.targetSdk.get().toInteger()
versionCode libs.versions.versionCode.get().toInteger()
versionName libs.versions.versionName.get().toString()
testInstrumentationRunner libs.versions.testInstrumentationRunner.get().toString()
}
......
}
我們在輸入的時候,輸入 libs
之后就會有相對應(yīng)的提示啦裙椭。在依賴?yán)锩娴氖褂萌缦拢?/p>
dependencies {
//bundle
implementation libs.bundles.andorid.base
implementation libs.bundles.smart.refresh
implementation libs.bundles.net
implementation libs.bundles.junit
......
}
注意事項
需要注意的是躏哩,如果你定義名字的時候,使用了下劃線揉燃。那么導(dǎo)入的時候需要多一個層級扫尺,什么意思呢?如果你輸入的名字是如下類似的:
//方式一:
alias('imp_coreKtx').to('androidx.core','core-ktx').versionRef('coreKtx')
//方式二:
andorid_base = ["coreKtx","appcompat","material","constraintlayout"]
那么在導(dǎo)入依賴的時候就需要如下寫法:
//方式一:
implementation libs.imp.coreKtx
//方式二:
implementation libs.bundles.andorid.base
可以簡單理解為炊汤,它會自動把 _
轉(zhuǎn)為 .
正驻,并且需要注意的是弊攘,在編碼的過程中,代碼可能會提示 libs()
的代碼塊拨拓,如果使用這個肴颊,構(gòu)建會報錯(具體原因沒有深入研究)氓栈≡祝總之,我們先手動輸入 libs
就不會出現(xiàn)問題啦授瘦。
總結(jié)
以上就是本篇文章的全部內(nèi)容醋界。這種項目依賴管理方式必須在高版本的gradle
上面實現(xiàn),實現(xiàn)有兩種:
- 項目的
setting.gradle
文件- 創(chuàng)建一個新的
.toml
后綴名文件
兩個方式的區(qū)別提完,也寫在了文章上面形纺,至于采用哪種方式,就看各位的喜好了徒欣。唯一需要注意的就是在命名的時候逐样,輸入下劃線的導(dǎo)入?yún)^(qū)別。參考上面的注意事項打肝。