GoogleService初始化失败


113

我在我的Android应用程序中使用Google Maps。我已经创建了密钥,并在清单文件中添加了必要的权限。但是很快我启动了应用程序,我在调试器中收到了以下消息:

GoogleService未能初始化,状态:10,缺少预期的资源:“ R.string.google_app_id”,用于初始化Google服务。可能的原因是缺少google-services.json或com.google.gms.google-services gradle插件。

我不知道怎么了。地图运行正常,我可以毫无问题地使用它。我的gradle文件具有以下条目:

编译'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 2015年


我都尝试过,但仍然收到相同的消息!
扎克2015年

1
您的设备播放服务APK是否已更新?
阿比吉扬2015年

这些解决方案均无效,但是更新Services APK似乎可以解决问题!
midoriha_senpai '16

Answers:


38

您需要将配置文件(google-services.json)所产生developer.google.com,在官方文档的第2步中提到这里

过程很简单

  1. 您可以选择您的项目或创建一个新项目。
  2. 然后,选择所需的服务(在本例中为maps服务)之后,可以生成配置文件。

    对于已迁移到Firebase项目的人员,可以通过转到Firebase Console,选择您的项目并在设置下找到配置文件来获得相同的信息。

  3. 然后在官方文档的第3步中所报位置

    google-services.json您刚刚下载的文件复制到Android的app /或mobile /目录中

附言:对于不赞成这个答案的人,请就您为什么不赞成它发表评论。


6
在新版Google Play服务中,我们是否真的需要在我们的应用中使用此功能?还是仅用于Google登录?似乎很奇怪,日志好像我需要它一样向我抛出错误,但我可能不需要
-RED_

2
@Radix ...我转到了您共享的链接,但它要求我注册Google登录或Google Cloud Messaging ...与地图无关。任何想法?另外,将此json文件复制到/ app下的位置有点奇怪...您能澄清一下吗?非常感谢!
约翰尼·吴

2
我们的应用程序中已经有了google-services.json,但是升级到8.4.0时我们不得不重新创建它。
罗伊·索尔伯格

1
同样的问题,添加google-services.json并没有帮助,这很奇怪,它没有看到我已经激活的gcm,而是想创建每次自己的服务器密钥
AndrewV。

11
在此处查看Google产品经理的正确回复:stackoverflow.com/questions/34365369/…–
艾哈迈德·穆尼尔

52

[来自产品经理@ Google]

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

  • 从此链接中选择您的应用程序/项目名称和Android软件包名称,然后单击Continue to Choose and configure services
  • 点击Continue to Generate Configuration files
  • 下载google-services.json文件并将其复制到Android项目中的app/mobile/模块目录。

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

请勿按照其他答案之一的建议来复制 PROJECT_NUMBER,因为google_app_id引用的是项目中的应用,而不是项目本身。


1
对于使用gradle-experimental插件的人,google-services.json不会直接生效。解决方法请参考stackoverflow.com/a/38097895/457137
zevoid

为什么必须包含json文件?为什么在运行时无法在代码中提供ID?
der_michael

文件进入/ app目录,而不是顶级目录?
IgorGanapolsky

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 '16

1
我的解决方案未列出,所以我回答了这个问题,为人们提供了另一个解决该问题的方法。就您而言,您可能已安装了额外的库。尝试仅使用com.google.android.gms:play-services-maps:8.4.0
13rac1 2016年

@eosrei,仅使用com.google.android.gms:play-services-maps:8.4.0为我工作,谢谢!
akshay7692 '16

4

我遇到了同样的问题,并按照官方的解决方案进行了解决

步骤如下:

  1. google-services.json从此链接获取配置文件。

  2. google-services.json您刚刚下载的文件复制到Android Studio项目的app /或mobile /目录中。

  3. 将依赖项添加到您的项目级别的build.gradle中:

    classpath 'com.google.gms:google-services:1.5.0-beta2'
  4. 将插件添加到您的应用程序级别的build.gradle中:

    apply plugin: 'com.google.gms.google-services'
  5. 将此依赖项添加到您的应用程序级别的build.gradle中:

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

1
我认为最好使用com.google.gms:google-services:1.5.0,因为它比测试版更好,可以消除您应用中的一些不可预测的错误。
Andrew V.

@AndrewV。是的我同意。我从上面给出的链接复制了版本“ 1.5.0-beta2”。
2016年

1

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

Build > Rebuild Project

可能是由于在执行完全重建之前json文件中的字符串未集成到已编译资源中的事实。


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



0

那时我有同样的问题。通过仅使用必要的播放服务库(在我的情况下为GCM)就可以解决该问题。

相反com.google.android.gms:play-services:8.4.0,我使用 com.google.android.gms:play-services-gcm:8.4.0。看到这里了解更多信息;这也解决了multidex问题。

然后,我同时应用了@Radix和@Alexander的方法来删除已在logcat中输出有关GCM的消息google-services.json




-2

只是有另一个解决方案,我不小心将其删除

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
        .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

添加并工作,用于新的解决方案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.