将 firebase 库更新到 16.0.0 会引发 google play services 依赖问题
Posted
技术标签:
【中文标题】将 firebase 库更新到 16.0.0 会引发 google play services 依赖问题【英文标题】:Updating firebase library to 16.0.0 raises google play services dependency issue 【发布时间】:2018-11-03 23:40:29 【问题描述】:我的项目一直运行良好,直到有一天,无缘无故(我没有改变任何东西),gradle 开始出现这个奇怪的错误:
Program type already present: com.google.android.gms.internal.measurement.zzabo
在出现此错误时,我的项目级 gradle 是这样的:
buildscript
repositories
jcenter()
maven
url 'https://maven.google.com'
// Alternative URL is 'https://dl.google.com/dl/android/maven2/'
maven url 'https://plugins.gradle.org/m2/'
maven url 'https://maven.fabric.io/public'
dependencies
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:4.0.0'
classpath 'io.fabric.tools:gradle:1.25.3'
classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:0.8.1'
allprojects
repositories
jcenter()
maven
url 'https://dl.bintray.com/sayyam/maven'
maven
url "https://jitpack.io"
maven
url 'https://maven.google.com'
task clean(type: Delete)
delete rootProject.buildDir
这是我的应用级 gradle:
apply plugin: 'com.android.application'
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
apply plugin: 'io.fabric'
android
compileSdkVersion 27
buildToolsVersion "27.0.3"
dexOptions
javaMaxHeapSize "4g"
packagingOptions
exclude 'META-INF/rxjava.properties'
defaultConfig
applicationId "com.example"
deviceCheck
minSdkVersion 17
targetSdkVersion 27
versionCode 8
versionName "1.0"
vectorDrawables.useSupportLibrary = true
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
dependencies
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.google.firebase:firebase-invites:15.0.1'
implementation 'com.google.firebase:firebase-core:15.0.2'
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.2'
implementation 'com.google.android.gms:play-services-maps:15.0.1'
implementation 'com.google.android.gms:play-services-location:15.0.1'
implementation 'com.google.android.gms:play-services-places:15.0.1'
implementation 'com.google.maps.android:android-maps-utils:0.5'
implementation 'com.android.support:support-v13:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
.....other dependencies.....
testImplementation 'junit:junit:4.12'
apply plugin: 'com.google.gms.google-services'
我在 *** 上搜索并找到了 this 答案。这表示此问题可能与 firebase 依赖版本和 google-services 插件有关。所以我将google-services
插件版本更新为4.0.0
,并将firebase 更新为最新版本16.0.0
。正如人们对 gradle 所期望的那样,它给出了另一个似乎与 firebase 版本 16.0.0 相关的错误。
每当我将 firebase 版本更改为 16.0.0 时,显然它也会尝试自动将 google play 服务依赖项升级到 16.0.0。这甚至不存在!它引发以下 gradle 错误:
Failed to resolve: com.google.android.gms:play-services-maps:16.0.0
Failed to resolve: com.google.android.gms:play-services-location:16.0.0
Failed to resolve: com.google.android.gms:play-services-places:16.0.0
Failed to resolve: com.google.android.gms:play-services-gcm:16.0.0
Failed to resolve: com.google.android.gms:play-services-base:16.0.0
Failed to resolve: com.google.android.gms:play-services-basement:16.0.0
Failed to resolve: com.google.android.gms:play-services-measurement-base:16.0.0
Failed to resolve: com.google.android.gms:play-services-tasks:16.0.0
Failed to resolve: com.google.android.gms:play-services-stats:16.0.0
Failed to resolve: com.google.android.gms:play-services-ads-identifier:16.0.0
我尝试使用 resolutionStrategy 强制 gms 库的版本,但无济于事。我该怎么办?我做错了什么?
注意:我没有明确更改播放服务库版本,gradle 似乎是因为 firebase 才这样做的。
编辑: 这个问题可以通过this 问题中给出的解决方案来解决,但它仍然不是重复的,因为在我的情况下,onesignal 插件只更新了 gms 库版本而不是 firebase 版本。所以任何遇到这个问题的人都不会搜索this问题中使用的关键字。
【问题讨论】:
您将哪些 Firebase 依赖升级到 16.0.0? firebase-core 和 firebase-invites..我在 gradle 中只有这两个 Highest firebase version code is used for compiling play services library too的可能重复 是的,我没有遇到它,因为我什至没想到它与 onesignal 相关,因为它工作正常并且在更新 firebase 后出现问题 另请注意,在我的情况下,onesignal 插件正在更新 gms 库版本而不是 firebase 。因此,遇到此问题的任何人都不会搜索 this 问题中使用的关键字。 【参考方案1】:相信你也遇到了和https://***.com/a/50516114/7070704的发帖者一样的问题,分辨率一样。
基本上,com.onesignal.androidsdk.onesignal-gradle-plugin 插件会迫使您将依赖项提升到不存在的东西上。
【讨论】:
老兄,非常感谢!我什至没想到这个问题可能与那个愚蠢的插件有关,因为它以前运行良好。通过将 onesignal 插件版本更新为 0.10.1 解决了该问题...我还将 onesignal 依赖项更新为 3.9.1 还从 onesignal 中排除了 firebase-messaging,因为它很旧,并且会产生与 firebase-iid 相关的冲突,firebase-iid 也包含在 firebase-invites 中。在 17.0.0 版本中单独添加了 firebase-messaging以上是关于将 firebase 库更新到 16.0.0 会引发 google play services 依赖问题的主要内容,如果未能解决你的问题,请参考以下文章
React v15.5.0更新说明 & v16.0.0更新预告
[使用AWS lambda函数每1小时更新Firebase数据库
Firebase 选项中未定义存储桶。将个人资料照片更新到 Firebase