簡體   English   中英

Gradle離線同步問題

[英]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
...

診斷步驟

  1. 打印所有引用play-services-ads-identifier依賴的地方
./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。

  1. 接下來要查看的最重要的事情是play-services-ads-identifier是從哪里引用的。 這是在依賴名稱后的下一行的輸出中指定的,在我的特定情況下,這些來源是
    1. com.google.android.gms:play-services-analytics-impl:17.0.0
    2. com.google.android.gms:play-services-ads: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM