Day 20 提到將要來一睹 Understand Gradle Dependency Resolution Easier 對依賴項(dependency) 解析的說明。
whenever we introduce a new update to the Base Module, not every feature Feature Module will get onto the latest Base Module.
當我們引進基本模組 (Base Module) 的更新,並不是每個功能模組 (Feature Module) 都會套用至最新的基本模組。
Hence, when the Coordinator Module compiles everything up, which version of the Base Module gets resolved?
因此,當協調模組 (Coordinator Module) 編譯所有專案原始碼時,它將會解析哪一個版本的基本模組?
build.gradle (Module :app) 檔案
dependencies {
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {
exclude group: 'com.android.support', module: 'support-annotations'
})
testImplementation 'junit:junit:4.13.2'
testImplementation 'androidx.test:core:1.4.0'
testImplementation "com.google.truth:truth:1.1"
implementation 'com.android.support:multidex:1.0.3'
implementation 'androidx.multidex:multidex:2.0.1'
implementation "androidx.core:core-ktx:1.6.0"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4"
implementation "androidx.concurrent:concurrent-futures-ktx:1.1.0"
implementation 'androidx.fragment:fragment-ktx:1.5.6'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
...
}
上面可以看到這個範例專案引入了 androidx 的相關依賴項。像是 androidx.core:core-ktx:1.6.0
、androidx.fragment:fragment-ktx:1.5.6
、androidx.lifecycle:lifecycle-livedata-ktx:2.3.1
等等。
公司的專案有用到這些依賴項。別人寫出來的依賴項應該或多或少也有使用到這些 androidx 的相關依賴項。
在開發過程中,你想要引入使用一個 A 依賴項。
你要如何知道這個依頼項使用的常見依賴項,會跟你專案使用的常見依賴項版本一致或相容呢?
除了事先查看依賴項的文件說明,另一個更直接了當的方式就是,當你在構建過程中,被錯誤訊息嚇到的時候。
在遇到依賴項衝突錯誤時,我會使用以下解決方式:
exclude
constraint {}
區塊欲知詳情,下回待續。
資料來源
Eyle - Understand Gradle Dependency Resolution Easier