我試圖更新我的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 (*)
爲什麼你需要排除任何東西?它應該工作得很好。 – creativecreatorormaybenot
@creativecreatorormaybenot看來,Android gradle插件(3.0.0-beta2)對支持庫衝突更爲嚴格。所以它不「工作得很好」。刪除'classpath「com.google.gms:google-services:3.1.0」'(和申請行)允許應用程序編譯,而不是。 – Mark
你可以發佈你的應用程序級別的依賴關係嗎? 我有使用Firebase-UI和google-services插件的類似錯誤。 我通過分開添加所用的所有Firebase依賴項來修復它。 之後,它工作得很好,我並不需要排除任何東西。 –