3

我試圖更新我的Android應用Ø,並在此過程中需要更新,以支持庫26如何解決由gradle插件創建的依賴衝突?

我compileSdkVersion是26,targetSdkVersion 26,buildToolsVersion 26.0.1,支持庫的版本是26.0.1 ,併發揮服務/ firebase消息是11.0.4。我正在使用Android Studio 3.0 b2和Android gradle插件3.0.0-beta2。看起來這個版本對支持圖書館衝突要敏感得多。

我不得不手動排除支持的依賴,以解決因爲播放服務和對老版本的支持庫的火力鏈接衝突:

implementation("com.google.android.gms:play-services-auth:$playServicesVersion",{ 
    exclude group: 'com.android.support' 
}) 

implementation("com.google.android.gms:play-services-identity:$playServicesVersion",{ 
    exclude group: 'com.android.support' 
}) 

implementation("com.google.android.gms:play-services-base:$playServicesVersion",{ 
    exclude group: 'com.android.support' 
}) 

implementation("com.google.android.gms:play-services-analytics:$playServicesVersion",{ 
    exclude group: 'com.android.support' 
}) 

implementation("com.google.firebase:firebase-messaging:$playServicesVersion",{ 
    exclude group: 'com.android.support' 
}) 

implementation("com.google.firebase:firebase-analytics:$playServicesVersion",{ 
    exclude group: 'com.android.support' 
}) 

這解決我的所有依賴衝突只有一個除外。

谷歌播放服務/火力地堡需要使用谷歌的服務gradle這個插件來解析生成以.json文件,幷包括應用程序必需的密鑰/祕密。我的build.grade有這樣的build腳本塊:

buildscript { 
    repositories { 
     maven { url "https://maven.google.com" } 
     jcenter() 
    } 

    dependencies { 
     classpath "com.google.gms:google-services:3.1.0" 
    } 
} 

並且在腳本的末尾,我應用了插件。將apply和classpath註釋掉後,所有內容都可以正確編譯。然而,似乎google-services 3.1.0添加了對支持庫版本25.2.0的依賴,並且我還無法弄清楚如何覆蓋它。該消息是:

  • 出了什麼問題:執行失敗的任務 ':應用程序:preDevelopmentDebugBuild'。

    Android依賴'com.android.support:support-v4'對於編譯(25.2.0)和運行時(26.0.1)classpath有不同的版本。您 應通過DependencyResolution手動設置相同的版本

注意,我甚至不能降級到支持庫25.4.0,我得到了同樣的錯誤(只需更換26.0.1在上面的消息用25.4.0)。唯一可行的版本是25.2.0

運行./gradlew app:dependencies與包括類路徑依賴,使我這個:

compile - Compile dependencies for 'main' sources (deprecated: use 'implementation' instead). 
\--- com.google.firebase:firebase-core:11.0.4 
    \--- com.google.firebase:firebase-analytics:[11.0.4] -> 11.0.4 
      +--- com.google.firebase:firebase-analytics-impl:[11.0.4] -> 11.0.4 
      | +--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 
      | | \--- com.android.support:support-v4:25.2.0 
      | |   +--- com.android.support:support-compat:25.2.0 
      | |   | \--- com.android.support:support-annotations:25.2.0 
      | |   +--- com.android.support:support-media-compat:25.2.0 
      | |   | +--- com.android.support:support-annotations:25.2.0 
      | |   | \--- com.android.support:support-compat:25.2.0 (*) 
      | |   +--- com.android.support:support-core-utils:25.2.0 
      | |   | +--- com.android.support:support-annotations:25.2.0 
      | |   | \--- com.android.support:support-compat:25.2.0 (*) 
      | |   +--- com.android.support:support-core-ui:25.2.0 
      | |   | +--- com.android.support:support-annotations:25.2.0 
      | |   | \--- com.android.support:support-compat:25.2.0 (*) 
      | |   \--- com.android.support:support-fragment:25.2.0 
      | |    +--- com.android.support:support-compat:25.2.0 (*) 
      | |    +--- com.android.support:support-media-compat:25.2.0 (*) 
      | |    +--- com.android.support:support-core-ui:25.2.0 (*) 
      | |    \--- com.android.support:support-core-utils:25.2.0 (*) 
      | +--- com.google.firebase:firebase-iid:[11.0.4] -> 11.0.4 
      | | +--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 (*) 
      | | \--- com.google.firebase:firebase-common:[11.0.4] -> 11.0.4 
      | |   +--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 (*) 
      | |   \--- com.google.android.gms:play-services-tasks:[11.0.4] -> 11.0.4 
      | |    \--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 (*) 
      | +--- com.google.firebase:firebase-common:[11.0.4] -> 11.0.4 (*) 
      | \--- com.google.android.gms:play-services-tasks:[11.0.4] -> 11.0.4 (*) 
      +--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 (*) 
      \--- com.google.firebase:firebase-common:[11.0.4] -> 11.0.4 (*) 
+0

爲什麼你需要排除任何東西?它應該工作得很好。 – creativecreatorormaybenot

+0

@creativecreatorormaybenot看來,Android gradle插件(3.0.0-beta2)對支持庫衝突更爲嚴格。所以它不「工作得很好」。刪除'classpath「com.google.gms:google-services:3.1.0」'(和申請行)允許應用程序編譯,而不是。 – Mark

+0

你可以發佈你的應用程序級別的依賴關係嗎? 我有使用Firebase-UI和google-services插件的類似錯誤。 我通過分開添加所用的所有Firebase依賴項來修復它。 之後,它工作得很好,我並不需要排除任何東西。 –

回答

5
configurations.all { 
     resolutionStrategy.eachDependency { DependencyResolveDetails details -> 
      def requested = details.requested 
      if (requested.group == 'com.android.support') { 
       if (!requested.name.startsWith("multidex")) { 
        details.useVersion '26.0.1' 
       } 
      } 
     } 
    } 

你這樣的支持庫都應該編譯的版本相同。只需將模塊級Gradle構建腳本中的片段添加到依賴關係即可。

0

看來,這個問題實際上已經做到通過子模塊包括依賴性。

implementation(project(':common'),{transitive = true}) 

但是,這並沒有區別:正在通過一個共同的子模塊,例如:

implementation project(':common') 

我也試圖包含的支持庫。

是工作的唯一的事情就是直接納入我的頂層,支持庫中的build.gradle

+0

看來,我的依賴關係還沒有包含其他模塊 - 都必須在每個模塊中明確定義 - 如果傳遞是打開或不打開都無關緊要。 – Mark

+0

要將依賴關係轉發到鏈上,而不是「實現」,請使用「api」 – Mark