谷歌宣布新的 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 项目同步失败的主要内容,如果未能解决你的问题,请参考以下文章