[英]Gradle offline sync issue
我在離線模式下使用 gradle 遇到了一個問題:當離線未選中時,我的項目運行良好,然后,我需要離線工作(因為我正在坐火車),並且在不接觸任何 gradle 文件的情況下,這拋出錯誤:
> Could not resolve com.google.android.gms:play-services-basement:[15.0.1,16.0.0).
Required by:
project :app > com.google.android.gms:play-services-ads:15.0.1
project :app > com.google.android.gms:play-services-ads-lite:15.0.1
project :app > com.google.android.gms:play-services-gass:15.0.1
> No cached version listing for com.google.android.gms:play-services-basement:[15.0.1,16.0.0) available for offline mode.
為什么在上次在線同步期間沒有緩存此依賴項? 我該怎么做才能在沒有任何互聯網連接的情況下構建這個項目?
該問題可能與com.google.android.gms:play-services-basement
依賴項的沖突版本有關,這些依賴項是來自build.gradle 的多個更高級別依賴項隱式要求的。
下面的步驟描述了如何使用com.google.android.gms:play-services-ads-identifier
(在下面的示例中使用)依賴項來診斷相同的問題。
“app”用作示例,因此將應用程序替換為您的 app_module 的實際名稱。
先決條件(最初有問題的情況):
我的build.gradle有以下內容:
...
implementation 'com.google.android.gms:play-services-ads:15.0.1'
implementation 'com.google.android.gms:play-services-analytics:17.0.0'
...
取消選擇離線工作時,運行 Gradle 同步工作正常。 但是一旦我打開Offline work ,在 gradle 同步過程中就會彈出以下錯誤:
:app@debug/compileClasspath': Could not resolve com.google.android.gms:play-services-ads-identifier:[15.0.1,16.0.0).
Disable offline mode and sync project
Show Details
Affected Modules: app
...
診斷步驟:
./gradlew :app:dependencyInsight --configuration releaseRuntimeClasspath --dependency "com.google.android.gms:play-services-ads-identifier"
就我而言,在所有輸出中,我看到以下幾行:
...
com.google.android.gms:play-services-ads-identifier:17.0.0
+--- com.google.android.gms:play-services-analytics-impl:17.0.0
| +--- com.google.android.gms:play-services-analytics:17.0.0 (requested com.google.android.gms:play-services-analytics-impl:[17.0.0])
| |
...
...
com.google.android.gms:play-services-ads-identifier:[15.0.1,16.0.0) -> 17.0.0
\--- com.google.android.gms:play-services-ads:15.0.1
+--- releaseRuntimeClasspath
...
線
com.google.android.gms:play-services-ads-identifier:[15.0.1,16.0.0) -> 17.0.0
意味着存在沖突,並且play-services-ads-identifier 的版本已解析為 17.0.0,而最初請求的是 15.0.1。
因為我知道這兩個依賴項是我的頂級依賴項(即在build.gradle中明確指定)。 現在我有以下選項來解決這個問題。
解決方案1
我可以避免版本沖突,例如通過在應用程序的build.gradle中將com.google.android.gms:play-services-ads:15.0.1
升級到com.google.android.gms:play-services-ads:17.0.0
模塊。 這樣做可以讓 Gradle 在選擇離線工作時成功同步。
解決方案2
保持依賴但排除沖突的模塊。 IE。 改變
implementation 'com.google.android.gms:play-services-ads:15.0.1'
到
implementation ('com.google.android.gms:play-services-ads:15.0.1') {
exclude group: 'com.google.android.gms', module: 'play-services-ads-identifier'
}
這樣做之后,我將面臨更多的同步錯誤,因為更多的底層依賴項有沖突。 結果,我將得到以下結果:
implementation ('com.google.android.gms:play-services-ads:15.0.1') {
exclude group: 'com.google.android.gms', module: 'play-services-ads-identifier'
exclude group: 'com.google.android.gms', module: 'play-services-base'
exclude group: 'com.google.android.gms', module: 'play-services-basement'
}
這使得 Gradle 也可以離線工作。
注意:在您的情況下,可能會在上面顯示的dependencyInsight命令的樹狀輸出中更深地找到導致沖突的源依賴項。
我使用的環境:
macOS 上的 Android Studio v3.5.2、Gradle 插件 v3.5.2、Gradle v5.6.4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.