谷歌服务初始化失败

113
我正在我的安卓应用程序中使用谷歌地图。我已经创建了密钥并在清单文件中添加了必要的权限。但是当我启动应用程序时,调试器会显示以下消息:
GoogleService初始化失败,状态:10,缺少预期的资源:'R.string.google_app_id'以初始化谷歌服务。可能的原因是缺少google-services.json或com.google.gms.google-services gradle插件。
我不确定问题出在哪里。地图运行良好,没有任何问题。我的gradle文件中有以下条目:
compile 'com.google.android.gms:play-services:8.4.0'
它在抱怨什么?我该如何解决这个问题?

这个在你的清单文件中吗: <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> - j2emanue
看步骤2:https://developers.google.com/identity/sign-in/android/start?hl=en - Clayton Oliveira
我已经尝试了两种方法,但仍然收到相同的消息! - Zach
1
你的设备的Play服务APK已更新吗? - Abhigyan
没有这些解决方案都不起作用,但是更新服务APK似乎管用了! - midoriha_senpai
将"play-services:8.4.0"更新到"9.2.0"解决了我的问题。 - Greg T
11个回答

52

[来自Google产品经理]

您可以通过按照以下步骤下载和复制适用于您的Android应用程序的google-services.json文件来解决此问题:

  • 此链接中选择您的应用程序/项目名称和Android包名称,然后单击 继续选择和配置服务
  • 单击继续生成配置文件
  • 下载google-services.json并将该文件复制到Android项目中app/mobile/模块目录中。

如果您之前已经将您的Google项目导入Firebase,则可以在Firebase控制台的项目设置下获取更新的google-services.json文件。

请勿像其他答案所建议的那样复制PROJECT_NUMBER,因为google_app_id是指在项目内部的应用程序,而不是项目本身。


1
使用 gradle-experimental 插件的开发者需要注意,google-services.json 文件不会直接生效。请参考 https://dev59.com/85Pfa4cB1Zd3GeqPKfop#38097895 获取解决方案。 - zevoid
为什么必须包含JSON文件?为什么不能在代码运行时提供ID? - der_michael
文件应该放在 /app 目录下,而不是顶层目录下? - IgorGanapolsky

39
您需要将由developer.google.com生成的配置文件(google-services.json)放置在官方文档此处第二步中提到的位置。
这个过程很简单:
  1. 您可以选择您的项目或创建一个新的项目。
  2. 然后,在选择所需服务(在本例中为地图服务)之后,您可以生成配置文件。

    对于已经迁移到Firebase项目的人员,他们可以通过进入Firebase控制台,选择您的项目并在设置下找到配置文件来获得相同的内容。

  3. 然后按照官方文档此处第三步中的引用操作:

    将刚下载的google-services.json文件复制到Android应用程序/或移动目录中。

附言:对于给这个答案点踩的人,请留下评论说明你为什么要这样做。


6
在新版Google Play服务中,我们实际上需要这个应用程序吗?还是只适用于Google登录?看起来很奇怪的是,日志会抛出错误,好像我需要它,但我可能并不需要。 - RED_
2
@Radix...我访问了你分享的链接,但它要求我注册Google登录或Google云消息传递...没有关于地图的内容。你有什么想法吗?此外,将此JSON文件复制到/app目录下有点奇怪...你能澄清一下吗?非常感谢! - Johnny Wu
2
我们的应用程序中已经有了google-services.json文件,但是在升级到8.4.0版本时,我们不得不重新创建它。 - Roy Solberg
1
同样的问题,添加google-services.json文件也没有帮助,奇怪的是它看不到我已经激活的GCM,并且每次都想创建自己的服务器密钥。 - Andrew V.
11
请看谷歌产品经理在此网址上的正确回答:https://dev59.com/dVsX5IYBdhLWcg3wALXa#37720340 - Ahmed Mounir
显示剩余12条评论

11

在我的情况下,这个错误的原因是Gradle的Google Services插件和Play Services库是不兼容的版本。 以下是兼容版本的说明:

1)将依赖项添加到项目级别的build.gradle文件中:

classpath 'com.google.gms:google-services:1.5.0-beta2'

2)将插件添加到您的应用级 build.gradle 文件中:

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

3) 如果您使用的是Android Studio,那么这就是要添加到应用程序build.gradle文件的依赖项部分的字符串:

dependencies {
  compile "com.google.android.gms:play-services:8.3.0"
}

来源: https://developers.google.com/cloud-messaging/android/client


1
谢谢,但这对我没用——Android Studio坚持说我必须安装google-services.json文件,尽管我认为如果你按照上面的三个步骤就可以覆盖对该文件的需要,它是不必要的。这导致我问:如果我提供的只是基本映射,为什么我需要Google用户登录系统呢? - iaindownie
1
我的解决方案没有被列出来,所以我回答了这个问题,为人们提供了另一个可能的解决方案。在你的情况下,你可能安装了额外的库。尝试只使用 com.google.android.gms:play-services-maps:8.4.0 - 13rac1
@eosrei,仅使用com.google.android.gms:play-services-maps:8.4.0对我有效,谢谢! - akshay7692

4
我遇到了同样的问题,按照官方解决方案进行了解决。
以下是具体步骤:
  1. get the configuration file google-services.json from this link.

  2. Copy the google-services.json file you just downloaded into the app/ or mobile/ directory of your Android Studio project.

  3. Add the dependency to your project-level build.gradle:

    classpath 'com.google.gms:google-services:1.5.0-beta2'
    
  4. Add the plugin to your app-level build.gradle:

    apply plugin: 'com.google.gms.google-services'
    
  5. Add this dependency to your app-level build.gradle:

    dependencies {
        compile "com.google.android.gms:play-services:8.3.0"
    }
    

1
我认为最好使用com.google.gms:google-services:1.5.0,因为它比beta版本更好,可以消除应用程序中的一些不可预测的错误。 - Andrew V.
@AndrewV。是的,我同意。版本“1.5.0-beta2”是从我上面提供的链接复制的。 - Will

1

对于 Xamarin/Visual Studio Mac,我需要将以下内容添加到我的 Droid.csproj 文件底部。

<Target Name="ProcessGoogleServicesJson" Condition=" '@(GoogleServicesJson)' != '' AND '$(AndroidApplication)' == 'True' AND '$(DesignTimeBuild)' != 'True'" BeforeTargets="$(ProcessGoogleServicesJsonBeforeTargets)" AfterTargets="$(ProcessGoogleServicesJsonAfterTargets)">
<Message Text="Using ProcessGoogleServicesJson override" Importance="high" />
<ProcessGoogleServicesJson GoogleServicesJsons="@(GoogleServicesJson)" IntermediateOutputPath="$(IntermediateOutputPath)" MonoAndroidResDirIntermediate="$(MonoAndroidResDirIntermediate)" AndroidPackageName="$(_AndroidPackage)">
    <Output ItemName="_AndroidResourceDest" TaskParameter="GoogleServicesGeneratedResources" />
    <Output ItemName="FileWrites" TaskParameter="GoogleServicesGeneratedResources" />
</ProcessGoogleServicesJson>
<ItemGroup>
    <FileWrites Include="$(IntermediateOutputPath)\ProcessGoogleServicesJson.stamp" />
</ItemGroup>

https://github.com/xamarin/GooglePlayServicesComponents/issues/64


1

对于那些即使正确设置了play服务并将google-services.json文件放置在project/app文件夹中仍然面临此问题的人,实际解决方案是

Build > Rebuild Project

可能是因为json文件中的字符串直到进行完整重建后才会集成到编译资源中。


0
我使用的一个“快速修复”方法是禁用签名。如果您不想创建生产代码,可以将构建变体设置为debug、localOldDebug或localDebug。
在Android Studio左下角点击“Build Variants”。 如何在Android Studio中禁用生成的已签名APK

可以将问题作为评论提出。 - jjj

0

我之前也遇到过类似的问题。我通过仅使用必要的Play服务库来解决它,在我的情况下是GCM。

我使用了com.google.android.gms:play-services-gcm:8.4.0而不是com.google.android.gms:play-services:8.4.0。请参阅这里以获取更多信息; 这也解决了multidex问题。

然后,我采用了@Radix和@Alexander的方法,以删除logcat中关于google-services.json的GCM消息。


0

0

您可以在Gradle文件中更改您的应用程序的versionCodeversionName


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