我在android应用程序中使用谷歌地图。我已经在清单文件中创建了密钥并添加了必要的权限。但很快我启动了应用程序,我在调试器中收到了以下消息:
GoogleService初始化失败,状态:10,缺少预期的resource:'R.string.google_app_id'用于初始化谷歌服务。可能的原因是缺少google-services.json或com.google.gms.google-services gradle插件。
我不确定出了什么问题。地图运行良好,我可以毫无问题地使用它。我的等级文件有这样的条目:
compile'com.google.android.gms:play services:8.4.0'
它在抱怨什么?我该如何缓解?
[来自谷歌产品经理]
您可以通过以下步骤下载并复制Android应用程序的google-services.json
文件来解决此问题:
- 从该链接中选择您的应用程序/项目名称和Android软件包名称,然后单击
Continue to Choose and configure services
- 单击
Continue to Generate Configuration files
- 下载
google-services.json
并将文件复制到Android项目中的app/
或mobile/
模块目录中
如果你之前已经将你的谷歌项目导入Firebase,你可以从项目设置下的Firebase控制台获取更新的google-services.json。
不要复制其他答案建议的PROJECT_NUMBER,因为google_app_id指的是项目中的应用程序,而不是项目本身。
您需要放置developer.google.com生成的配置文件(google-services.json
),如官方文档的第二步所述
这个过程很简单
- 您可以选择您的项目或创建一个新项目
-
然后,在选择所需的服务(在本例中为maps服务)之后,您可以生成配置文件。
对于已经迁移到Firebase项目的用户,他们可以通过转到Firebase控制台,选择您的项目并在设置下找到配置文件来获得相同的设置。
-
然后,正如官方文件第3步所引用的那样
将您刚刚下载的
google-services.json
文件复制到Android 的应用程序/或手机/目录中
附言:如果有人对这个答案投了反对票,请留下评论,说明你为什么投反对票。
在我的情况下,这个错误的原因是Gradle的谷歌服务插件和Play Services库是不兼容的版本。兼容版本说明:
1) 将依赖项添加到项目级构建中。gradle:
classpath 'com.google.gms:google-services:1.5.0-beta2'
2) 将插件添加到您的应用程序级构建中。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
我遇到了同样的问题,并按照官方解决方案解决了它。
以下是步骤:
-
从该链接获取配置文件
google-services.json
。 -
将刚下载的
google-services.json
文件复制到Android Studio项目的app/或mobile/目录中。 -
将依赖项添加到项目级构建中。gradle:
classpath 'com.google.gms:google-services:1.5.0-beta2'
-
将插件添加到您的应用程序级构建中。gradle:
apply plugin: 'com.google.gms.google-services'
-
将此依赖项添加到应用程序级构建中。gradle:
dependencies { compile "com.google.android.gms:play-services:8.3.0" }
对于那些即使在正确设置播放服务并将google-services.json
文件放入project/app
文件夹后仍面临此问题的人,实际的解决方案是
Build > Rebuild Project
可能是因为json文件中的字符串在执行完全重建之前不会集成到已编译的资源中。
对于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
这也发生在我身上。在我的情况下,这是因为Android工作室试图在我的主要活动中插入一些代码。删除代码修复错误
插入的代码是关于应用程序索引:
https://developers.google.com/app-indexing/android/publish
我当时也遇到了同样的问题。只使用必要的游戏服务库就可以解决这个问题,在我的例子中是GCM。
我用的不是com.google.android.gms:play-services:8.4.0
,而是com.google.android.gms:play-services-gcm:8.4.0
。请参阅此处了解更多信息;这也解决了multidex问题。
然后,我应用@Radix和@Alexander的方法来删除logcat中关于google-services.json
的消息GCM已输出。
您可以在Gradle文件中更改应用程序的versionCode
和versionName
。
我使用的快速修复是禁用签名。如果您不想创建生产代码,可以将构建变体设置为debug、localOldDebug或localDebug。
点击Android Studio左下角的Build Variants。
如何禁用生成的签名apk安卓工作室