Gradle命令
打開AndroidStudio的Terminal(windows環境下),輸入下面命令:
gradlew :app:dependencies --configuration compile //查看編譯時依賴樹
gradle dependencies -configuration runtime //查看運行時依賴樹
gradle dependencies //查看所有依賴庫
什么是傳遞依賴
在Maven倉庫中,構件通過POM(一種XML文件)來描述相關信息以及傳遞性依賴。Gradle 可以通過分析 該文件獲取獲取所以依賴以及依賴的依賴和依賴的依賴的依賴,為了更加直觀的表述,可以通過下面的輸出 結果了解。
可以看到,我們的項目依賴了com.android.support-v4包,然而com.android.support-v4包卻依賴了一眾support的全家桶,借助Gradle的傳遞性依賴特性,你無需再你的腳本中把這些依賴都聲明一遍,你只需要簡單的一行,Gradle便會幫你將傳遞性依賴一起下載下來。
傳遞依賴特性可以輕松地通過transitive參數進行開啟或關閉,上面的示例中如果要忽略com.android.support-v4的傳遞性依賴可以采用指定 transitive = false 的方式來關閉依賴傳遞特性,也可以采用添加@jar的方式忽略該依賴的所有傳遞性依賴。
compile('com.android.support:support-v4:23.1.1'){
transitive = false
}
compile 'com.android.support:support-v4:23.1.1'@jar
當然,你也可以全局性的關閉依賴的傳遞特性。
configurations.all {
transitive = false
}
排除依賴
有些時候你可能需要排除一些傳遞性依賴中的某個模塊,此時便不能靠單純的關閉依賴傳遞特性來解決了。這時exclude就該登場了,如果說@jar徹底的解決了傳遞問題,那么exclude則是部分解決了傳遞問題。然而實際上exclude肯能還會用的頻率更更頻繁一些,比如下面幾種情況。
可以通過configuration配置或者在依賴聲明時添加exclude的方式來排除指定的引用。
exclude可以接收group和module兩個參數,這兩個參數可以單獨使用也可以搭配使用,具體理解如下:
compile('com.github.nanchen2251:CompressHelper:1.0.5'){
//com.android.support:appcompat-v7:23.1.1
exclude group: 'com.android.support'//排除組織依賴
exclude module: 'appcompat-v7'//排除模塊依賴
}
強制使用版本
當然,有時候你可能僅僅是需要強制使用某個統一的依賴版本,而不是排除他們,那么此時force就該登場了。指定force = true屬性可以沖突時優先使用該版本進行解決。
compile('com.github.nanchen2251:CompressHelper:1.0.5'){
force = true
}
全局配置強制使用某個版本的依賴來解決依賴沖突中出現的依賴
configurations.all {
resolutionStrategy {
force 'com.github.nanchen2251:CompressHelper:1.0.5'
}
}
使用動態版本
如果你想讓你的工程始終采用最新依賴,那么Gradle提供了一種方式可以始終保證采用依賴的最新版本而無需每次手工檢查修改版本。
使用加號+,可以讓Gradle在每次執行構建時檢查遠程倉庫是否存在該依賴的新版本,如果存在新版本則下載選用最新版本。當然也可以指定依賴某個大版本下的最新子版本,1.+表示始終采用該依賴最新的1.x版本的最新依賴。
compile 'com.android.support:support-v4:+'//下載最新
compile 'com.android.support:support-v4:23+'//基于23這個版本最新
- 雖然這是看上去十分風騷的一種用法,但這無疑會降低你系統構建的速度同時提高構建失敗的風險。因為Gradle不得不每次檢查遠程倉庫是否存在最新版本,同時新版本也可能帶來無法預知的兼容性問題。
一個綜合案例
compile('com.github.nanchen2251:CompressHelper:1.0.5') {
// 沖突時優先使用該版本
force = true
// 依據構建名稱排除
exclude module: 'CompressHelper'
// 依據組織名稱排除
exclude group: 'com.github.nanchen2251'
// 依據組織名稱+構件名稱排除
exclude group: 'com.github.nanchen2251', module: 'CompressHelper'
// 為本依賴關閉依賴傳遞特性
transitive = false
}