谷歌游戏服务GCM 9.2.0要求“更新”回到9.0.0版本

179

今天早上我开始更新我的项目库到最新版本。

我尝试将 GCM 更新到最新版本9.2.0,但是我遇到了这个错误:

Error:Execution failed for task ':app:processDebugGoogleServices'。 请通过更新google-services插件的版本(有关最新版本的信息可在https://bintray.com/android/android-tools/com.google.gms.google-services/中找到)或将com.google.android.gms的版本更新为9.0.0来解决版本冲突。

这是我的代码:

dependencies {
    classpath 'com.android.tools.build:gradle:2.1.2'
    classpath 'com.google.gms:google-services:3.0.0'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}

然后:

dependencies {
    ...

    compile "com.google.android.gms:play-services-gcm:9.2.0"

    ...
}

有人遇到了同样的问题/解决了同样的问题吗?

谢谢。

编辑

显然,您必须在应用程序/build.gradle文件的底部应用您的GSM插件。 否则,版本9.2.0将在您的项目中引起冲突。

供参考,这是我的app/build.gradle文件现在的样子:

apply plugin: "com.android.application"
apply plugin: "com.neenbedankt.android-apt"

android {
    ...
}

dependencies {
    ...

    // Google Cloud Messaging
    compile "com.google.android.gms:play-services-gcm:9.2.0"

    ...
}

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

同样的问题在这里,我回滚到了9.0.0。 - mbonnin
@mbonnin 我最后也是这样做的。但是我肯定想知道这里发生了什么。到目前为止还没有找到答案,运气不太好。 - herrmartell
2
然后9.0.0有这个bug https://dev59.com/sVoU5IYBdhLWcg3wg3So,解决方案似乎是更新到9.2.0...但由于这里的bug,这是不可能的 :-( - mbonnin
6
如果我像Gusthema下面说的那样,在build.gradle文件的末尾应用插件,它就能正常工作。 - mbonnin
阅读我的帖子这里,了解如何以正确的方式纠正此问题。 - Pedro Varela
它并没有太多意义......但是通过在build.gradle的末尾编写"apply plugin",它能够运行。 - Massimo
11个回答

507

你有这条线吗?

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

在您的应用程序的build.gradle文件底部的那一行是什么?

当它在顶部时,我看到了一些错误,并且正如这里所写的那样,它应该在底部。


11
不对,gms插件应该放在文件底部,你可以在gms的文档中看到:https://developers.google.com/android/guides/google-services-plugin - Gusthema
1
我已经改正了。然而这并不能解决问题。 - herrmartell
1
我不确定为什么第一次尝试时它没有起作用。因为@mbonnin的评论,我刚刚再次尝试了一下,现在它可以工作了。谢谢。 - herrmartell
9
我在文件开头添加了这行内容,但把它放在底部后才起作用。 - SHA2NK
2
在底部添加插件解决了版本冲突。 - user_1989
显示剩余8条评论

54

只需将此行代码放在您的应用程序模块(而不是项目根目录)的gradle文件底部即可。

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

然后重新构建您的项目。


11

我也遇到了同样的问题,日期是2016年10月06日。我的解决方法如下:

将所有以9.?.?开头的依赖项更改为9.6.1。

使用sdk版本24和目标版本17进行编译。

由于我不仅使用身份验证,还使用了其他工具包,所以解决方案中可能还会有其他包。

在修改了您的build.gradle(Module:app)代码后,请执行以下操作:

  1. 在包含“applicationId“com.YOUR_PACKAGE_HERE””这句话的那一行中加入您的包名称。

  2. 同步您的项目(Ctrl+alt+v),然后重新编译。

以下是我使用的build.gradle(Module:app)文件代码:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"
    defaultConfig {
        applicationId "com.YOUR_PACKAGE_HERE"
        minSdkVersion 24
        targetSdkVersion 17
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    compile 'com.google.firebase:firebase-core:9.6.1'
    compile 'com.google.firebase:firebase-database:9.6.1'

    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'

    compile 'com.google.firebase:firebase-crash:9.6.1'
    testCompile 'junit:junit:4.12'

    compile 'com.google.firebase:firebase-messaging:9.6.1'

    compile 'com.google.firebase:firebase-ads:9.6.1'


    compile 'com.google.firebase:firebase-auth:9.6.1'


    compile 'com.google.android.gms:play-services:9.6.1'

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

6

之前版本也存在相同的问题。令人烦恼的是,新版本com.google.android.gms库总是在插件之前发布,因此无法使用新版本,因为它与旧插件不兼容。我不知道现在是否需要插件(谷歌文档太差了)。我记得以前不需要。唯一的方法是等待新的插件版本,或者您可以尝试删除插件依赖项,但正如我所说,我不确定是否没有插件gcm将会运行。我知道9.2.0版本的主要功能是新的Awareness APIhttps://inthecheesefactory.com/blog/google-awareness-api-in-action/en,如果您不需要它,则可以毫无问题地使用9.0.0版本。


啊,真是让人费解。既然没有文件说明,我就假设最新版本会随着所需插件一起发布。据我所知,你需要该插件才能使GCM正常工作,因此我猜测这是一个手动检查更新的解决方案。 - herrmartell
1
肯定的,@yaneq,谷歌文档很糟糕,我现在也遇到了同样的问题。 - Lutaaya Huzaifah Idris

5

Gustavomcls的解决方案对我有效。将com.google.*的版本更改为相同的版本。

我在buid.gradle(Module:app)中将两个依赖项都更改为9.2.1。

compile 'com.google.firebase:firebase-ads:9.2.1'
compile 'com.google.android.gms:play-services:9.2.1'

我也因为Firebase遇到了这个问题,但我不喜欢降级Firebase版本至9.2.1的解决方案。 - Sam Bellerose

2
在gradle的末尾添加以下这行代码:
apply plugin: 'com.google.gms.google-services'
因为如果放在最前面是不起作用的。我曾经遇到了类似的问题。

2

针对 Cordova 或 Ionic 混合应用

我在将 Firebase 云消息传递(FCM)集成到我的 Ionic 1 Cordova 构建后,遇到了非常相似的问题。

我通过以下步骤解决了这个问题:

因此,一个解决方法是:在 platforms/android 中打开 project.properties(它是一个文件),你会看到类似于下面的内容:

cordova.system.library.1=com.google.android.gms:play-services-ads:+
cordova.system.library.2=com.google.firebase:firebase-core:+
cordova.system.library.3=com.google.firebase:firebase-messaging:+

+

符号替换为您的目标版本号 - 如下所示

cordova.system.library.1=com.google.android.gms:play-services-ads:9.0.0
cordova.system.library.2=com.google.firebase:firebase-core:9.0.0
cordova.system.library.3=com.google.firebase:firebase-messaging:9.0.0

保存文件

然后使用以下命令编译构建

 ionic cordova run android
我希望这对每个人都有效。

我希望这对每个人都有效。


这刚刚改变了错误。这还算是好的,因为我已经尝试了成千上万个解决方案,但一直收到相同的错误信息。 - spaceman

2

从您的应用程序模块的 app/build.gradle 中打开文件并在 dependencies 块后重写以下行。这样可以使插件确定您正在使用哪个版本的 Play 服务。

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

我从这里得到了这个想法。 在本教程的第二点中,建议将上面的插件行放在您的app/build.gradle文件的底部,以避免引入任何依赖冲突。希望这能帮到你。

为什么你要重复半年前已经给出的答案? - Bevor

1
如果您也已经包含了Firebase,请将它们设置为与错误提示中的版本相同。

0

在使用位置服务时,我没有遇到任何问题,直到我尝试使用apply plugin: 'com.google.gms.google-services'。此时,我必须将其放在文件底部而不是顶部。原因是当你把它放在顶部时会出现冲突问题,而将其放在底部可以避免这些问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接