android - 在项目“应用程序”中,已解决的 Google Play 服务库依赖项依赖于另一个确切版本
问题描述
尝试使用 FireStore 和 Google 身份验证创建一个简单的应用程序。gradle有问题:
在项目“app”中,已解析的 Google Play 服务库依赖项依赖于另一个确切版本(例如“[15.0.1]”,但未解析为该版本。库表现出的行为将是未知的。
依赖失败:com.google.android.gms:play-services-flags:15.0.1 -> com.google.android.gms:play-services-basement@[ 15.0.1],但 play-services-basement 版本是16.0.1。
以下依赖项是直接的或具有传递依赖项的项目依赖项,这些依赖项会导致存在问题的艺术 ifact。-- 项目 'app' 依赖于 com.google.firebase:firebase-firestore@17.1.5 -- 项目 'app' 依赖于 com.firebaseui:firebase-ui-auth@4.2.0
对于扩展调试信息,使用 ./gradlew --info :app:assembleDebug 从命令行执行 Gradle 以查看工件的依赖路径。此错误消息来自 google-services Gradle 插件,在 https://github.com/google/play-services-plugins 报告问题并通过将“googleServices { disableVersionCheck = false }”添加到您的 build.gradle 文件来禁用。
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "myapp.com"
minSdkVersion 19
targetSdkVersion 27
versionCode 11
versionName "1.1"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.google.firebase:firebase-firestore:17.1.5'
implementation 'com.firebaseui:firebase-ui-auth:4.2.0'
}
apply plugin: 'com.google.gms.google-services'
com.google.gms.googleservices.GoogleServicesPlugin
项目等级:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.google.gms:google-services:4.2.0'
}
}
有人可以帮助我吗?
解决方案
对于没有真正解决问题的个别解决方案,这里有很多答案。以下是一般解决此问题的方法:
正如原始日志输出所暗示的,使用以下命令在终端中运行构建很有用:
./gradlew --info assembleDebug
这将为您提供冲突中涉及的所有依赖项的列表。它看起来与此类似(我删除了包名称以使其更具可读性):
Dependency Resolution Help: Displaying all currently known paths to any version of the dependency: Artifact(groupId=com.google.firebase, artifactId=firebase-iid)
-- task/module dep -> firebase-analytics@17.2.0
---- firebase-analytics:17.2.0 library depends -> play-services-measurement-api@17.2.0
------ play-services-measurement-api:17.2.0 library depends -> firebase-iid@19.0.0
-- task/module dep -> firebase-core@17.2.0
---- firebase-core:17.2.0 library depends -> firebase-analytics@17.2.0
------ firebase-analytics:17.2.0 library depends -> play-services-measurement-api@17.2.0
-------- play-services-measurement-api:17.2.0 library depends -> firebase-iid@19.0.0
-- task/module dep -> play-services-measurement-api@17.2.0
---- play-services-measurement-api:17.2.0 library depends -> firebase-iid@19.0.0
-- task/module dep -> firebase-iid@19.0.0
-- task/module dep -> firebase-messaging@17.1.0
---- firebase-messaging:17.1.0 library depends -> firebase-iid@[16.2.0]
-- task/module dep -> com.pressenger:sdk@4.8.0
---- com.pressenger:sdk:4.8.0 library depends -> firebase-messaging@17.1.0
------ firebase-messaging:17.1.0 library depends -> firebase-iid@[16.2.0]
从此列表中,您可以了解 2 件事:
- 在哪里找到冲突的依赖关系
- 设置了哪些版本的冲突依赖
在我的情况下,相互冲突的依赖是firebase-iid
:要么是@19.0.0
要么@16.2.0
要解决此问题,您必须firebase-iid
在build.gralde
.
因此,在上面的日志中,您可以看到有 2 个过时版本的 firebase-iid@16.2.0 示例。一个来自-- task/module dep -> firebase-messaging@17.1.0
第三方库(pressenger)的另一个。我们对第三方库没有影响,所以这里无所谓。但是对于其他依赖项,我们必须使用正确的版本显式声明它:
implementation 'com.google.firebase:firebase-messaging:20.0.0'
现在构建再次工作。美好的结局 :)
推荐阅读
- c++ - Gradle 包含目录下的所有文件(“递归”)
- sharepoint-online - 在 Power Automate 中加入 2 个 SharePoint 列表
- json - 如何在表vuejs中显示json
- mongodb - Mongoose - 如何访问/选择当前数据并将其与要更新的数据进行比较?
- javascript - 函数已定义但从未在 Vue 组件的脚本部分中使用
- c# - Newtonsoft 直接 json 属性名映射
- python - 使用 osmnx 查找最短路径
- javascript - 使用无效数据调用的函数 Query.where()
- xcode - Xcode 中下一次出现的大小写敏感选择
- c# - 如何在代码中从 WPF 数据网格列标题 (DataGridTemplateColumn) 获取工具提示?