谷歌宣布新的 sdk 版本控制系统后 Gradle 项目同步失败

Posted

技术标签:

【中文标题】谷歌宣布新的 sdk 版本控制系统后 Gradle 项目同步失败【英文标题】:Gradle project sync failing after Google announced the new sdk versioning system 【发布时间】:2018-10-14 10:05:28 【问题描述】:

我收到以下错误:

Cannot change dependencies of configuration ':app:api' after it has been included in dependency resolution.

更新: 当数据绑定被禁用时,我可以使用com.google.gms:google-services:3.3.0 进行构建,但这对于需要启用数据绑定的人来说不是一个解决方案。

在 Google 宣布新的 sdk 版本控制系统 (link) 后,我做了以下步骤:

    我按照指示更新了 gradle 文件,分别包含 gms 和 firebase 版本号。更新了应用插件行,更新了类路径。我仍然收到错误,不知道原因。

    以下是相关的 gradle 文件:

build.gradle(主):

buildscript 
    repositories 
        google()
        jcenter()
        maven  url 'https://dl.bintray.com/rvalerio/maven' 
        maven  url 'https://maven.fabric.io/public' 
    
    dependencies 
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'com.google.gms:google-services:3.3.0'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        classpath 'io.realm:realm-gradle-plugin:4.3.3'
        classpath 'io.fabric.tools:gradle:1.25.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    


allprojects 
    repositories 
        google()
        jcenter()
        maven  url 'https://jitpack.io' 
        maven  url 'https://maven.google.com' 
    

build.gradle (Module:app)

apply plugin: 'com.google.gms.google-services'

Firebase 依赖项:

//Firebase Dependencies
implementation "com.google.firebase:firebase-messaging:15.0.2"
implementation "com.google.firebase:firebase-core:15.0.2"
implementation "com.google.firebase:firebase-config:15.0.2"
implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') 
    transitive = true

GMS 和其他依赖项

implementation "com.android.support:recyclerview-v7:27.1.1"
implementation "com.android.support:support-v4:27.1.1"
implementation "com.android.support:cardview-v7:27.1.1"
implementation "com.android.support:design:27.1.1"
implementation "com.android.support:support-v13:27.1.1"
implementation "com.android.support.constraint:constraint-layout:1.1.0"
implementation "com.google.android.gms:play-services-location:15.0.1"
implementation "com.google.android.gms:play-services-vision:15.0.1"
implementation "com.google.android.gms:play-services-auth:15.0.1"
implementation "com.google.android.gms:play-services-maps:15.0.1"
    我已将错误日志从 android studio 3.1.2 here 粘贴到 pastebin 上。

感谢任何帮助!

【问题讨论】:

请同时添加包含 Firebase 依赖项的 build.grade 文件。 您是在使用其他模块还是只是应用程序模块?您还应该发布您的模块 build.gradle 文件 我可以在使用google-services:3.3.0时在应用模块中打开数据绑定时重现同样的问题。 @AlexMamo,我已经为 firebase、GMS 和支持库添加了 build.gradle 文件依赖项。 @j2emanue 我只使用 app 模块,没有别的。我已经发布了 build.gradle 文件。我想知道是否只有一小部分人面临这个问题...... 【参考方案1】:

设法针对 Play Services 和 Firebase 15.0.0 进行构建启用数据绑定 ...我的依赖项现在看起来与此类似,并且它再次构建,没有任何 Cannot change dependencies of configuration 投诉:

buildscript 

    dependencies 

        classpath "com.android.tools.build:gradle:3.1.2"

        // do not update, because 3.3.1 appears broken
        // classpath "com.google.gms:google-services:3.2.1"

        // meanwhile, there is version 4.0.2 available
        classpath "com.google.gms:google-services:4.0.2"
    

必须单独引用所有库。仅引用 com.google.android.gms:play‐services 和/或 com.google.firebase:firebase-core 不再起作用,因为 15.0.0

android 

    dependencies 

        // Play Services 15.0.0
        implementation "com.google.android.gms:play-services-base:15.0.1"
        implementation "com.google.android.gms:play-services-auth:15.0.1"
        implementation "com.google.android.gms:play-services-identity:15.0.1"

        // Firebase 15.0.0
        implementation "com.google.firebase:firebase-core:15.0.2"
        implementation "com.google.firebase:firebase-database:15.0.1"
        implementation "com.google.firebase:firebase-firestore:16.0.0"
        implementation "com.google.firebase:firebase-storage:15.0.2"
        implementation "com.google.firebase:firebase-crash:15.0.2"
        implementation "com.google.firebase:firebase-auth:15.1.0"
        implementation "com.google.firebase:firebase-messaging:15.0.2"
        implementation "com.google.firebase:firebase-config:15.0.2"
        implementation "com.google.firebase:firebase-invites:15.0.1"
        implementation "com.google.firebase:firebase-ads:15.0.1"
        implementation "com.google.firebase:firebase-appindexing:15.0.1"
        implementation "com.google.firebase:firebase-perf:15.2.0"
        implementation "com.google.firebase:firebase-functions:15.0.0"
    


apply plugin: 'com.google.gms.google-services'

还必须编辑 Manifest.xml 来修复支持库:

<application>

    <meta-data
        android:name="android.support.VERSION"
        android:value="27.1.1"
        tools:replace="android:value"/>

</application

【讨论】:

你是对的,如果你在 3.2.1 上并启用数据绑定,那么它就会构建。但是,我想通过谷歌知道/显示启用数据绑定时 3.3.0 已损坏。感谢您的帮助! @kash 添加注释时//noinspection GradleDependency 它甚至不建议更新到3.3.0 - 这只是一个外观修复。至少它是用3.2.1 构建的。 问题开始了,当添加classpath "com.google.android.gms:strict-version-matcher-plugin:1.0.0" ...这也是与3.3.0一起引入的。 android-developers.googleblog.com/2018/05/… ...它可能无法严格匹配那些 alpha 构建版本(无论什么);在发行说明中,应该解释版本控制的页面是 404。 现在有3.3.1 ...而我仍然收到相同的错误消息。 我收到 org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:compileDebugJavaWithJavac' 错误并启用数据绑定错误。当我运行 gradlew assemble --stacktrace 时出现错误在数据绑定生成的文件中。我该如何解决这个问题?【参考方案2】:

只需将您的 GooglePlay 服务依赖项降级到 3.2.1 :)

classpath 'com.google.gms:google-services:3.2.1'

【讨论】:

【参考方案3】:

这个问题似乎已通过使用新的 google-services 版本(截至今天为 4.0.1)得到解决。以下是解决上述问题的相关版本:

在您的项目 build.gradle 文件中:

dependencies  
classpath 'com.android.tools.build:gradle:3.1.3'
classpath 'com.google.gms:google-services:4.0.1' 

在您的应用 build.gradle 文件中:

//Firebase Dependencies
implementation "com.google.firebase:firebase-messaging:17.0.0"
implementation "com.google.firebase:firebase-core:16.0.0"
implementation "com.google.firebase:firebase-config:16.0.0"
implementation 'com.google.firebase:firebase-perf:16.0.0'

... apply plugin: "com.google.gms.google-services"

Databinding 也设置为 true:

dataBinding 
    enabled = true

Android Studio 版本:3.1.2

感谢大家提供各种解决问题的方法,例如 @Kyle 的回答以及向您展示如何在没有 google 服务的情况下使用 firebase 的中型帖子链接。

【讨论】:

【参考方案4】:

在我的项目 build.gradle 的 allProjects 块中添加 google() maven 后,一切正常,如下所示:

buildscript 
    repositories 
        jcenter()
        mavenCentral()
    
    dependencies 
        ...
    


repositories 
    ...


// You need to add the google maven in this block.
allprojects 
    repositories 
        jcenter()
        google()
    

【讨论】:

我在所有项目中都有 google() 但仍然出现该错误...我认为这与添加存储库的位置无关。我相信这与数据绑定和新的谷歌存储库有关。【参考方案5】:

虽然不是一个很好的解决方案,但我遵循了错误跟踪器中提到的 Google 员工的建议。

我正在使用

com.google.gms:google-services:3.3.1

我已启用数据绑定

`dataBinding.enabled true`

我从 app gradle 脚本中删除了插件引用

//apply plugin: 'com.google.gms.google-services'

并遵循此 Medium 帖子中的建议,包括所有必要的 Google 服务字符串值。

https://medium.com/@samstern_58566/how-to-use-firebase-on-android-without-the-google-services-plugin-93ecc7dc6c4

我的应用构建成功,一切正常。

【讨论】:

【参考方案6】:

数据绑定和3.3.0 版本的google-services 插件的问题已在此处报告:https://issuetracker.google.com/issues/79122163

截至今天,该错误处于“已分配”状态。

【讨论】:

【参考方案7】:

更新 我也可以用

编译
dataBinding.enabled false

在 android 配置和版本 3.3.0 中

原创

google-services:3.3.0 也有同样的问题,这是最后一个版本,但根据docs 应该使用 3.2.1 版本。我已经能够使用以下内容进行编译

 ext 
    kotlin_version = '1.2.41'
    firebaseCore = '15.0.2'
    authentication = '15.1.0'
    cloudFirestore = '16.0.0'
    cloudStorage = '15.0.2'
    crashlitics = '2.9.1'
    googleServices = '15.0.0'
    supportLibrary = '27.1.1'
    facebookSdkVersion = '4.31.0'
    twitterSdkVersion = '3.1.1'
    firebaseUI = '3.3.1'

 dependencies 

    classpath 'com.android.tools.build:gradle:3.2.0-alpha12'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

    classpath 'com.google.gms:google-services:3.2.1'

【讨论】:

我能够在数据绑定设置为 false 的情况下进行构建,但这对于需要数据绑定的人来说并不是解决问题的方法。因此,在我们找到解决方案之前,我将保持开放状态,并编辑问题以说明...感谢您的帮助!

以上是关于谷歌宣布新的 sdk 版本控制系统后 Gradle 项目同步失败的主要内容,如果未能解决你的问题,请参考以下文章

build.gradle-构建

build.gradle-构建

在 android eclipse 项目中使用新的 firebase sdk

直击“鸿蒙”?谷歌宣布:或将于8月启用AAB取代APK格式

混淆谷歌播放控制台中的版本控制

Android开发:《Gradle Recipes for Android》阅读笔记1.2