Google Play 服务更新到版本 13 后,出现错误

Posted

技术标签:

【中文标题】Google Play 服务更新到版本 13 后,出现错误【英文标题】:After Google Play Service update to version 13 I got an error 【发布时间】:2013-11-12 11:30:44 【问题描述】:

我该如何解决这个错误?

引起:java.lang.illegalargumentexception 11-01 11:08:12.845: E/androidRuntime(28885): Caused by: java.lang.IllegalStateException: 您应用的 AndroidManifest.xml 中的元数据标签没有正确的值。预期为 4030500,但发现为 0。您必须在元素中具有以下声明:

google-play-services_lib 清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.android.gms"
    android:versionCode="4030530"
    android:versionName="4.0.30 (889083-30)" >

    <uses-sdk android:minSdkVersion="8"/>

</manifest>

public void loginGooglePlus() 
    aHelper.setup(this, GameHelper.CLIENT_APPSTATE | GameHelper.CLIENT_GAMES);
    mHelper = aHelper.getAppStateClient();
    //crash is here
    mHelper.connect();

完整的错误日志:

11-01 11:38:13.507: E/AndroidRuntime(31297): FATAL EXCEPTION: main
11-01 11:38:13.507: E/AndroidRuntime(31297): java.lang.RuntimeException: Unable to start activity ComponentInfocom.company.application.android.aja/com.company.application.android.aja.BeetleBattleAndroidActivity: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value.  Expected 4030500 but found 0.  You must have the following declaration within the <application> element:     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2077)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.app.ActivityThread.access$600(ActivityThread.java:134)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.os.Looper.loop(Looper.java:154)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.app.ActivityThread.main(ActivityThread.java:4624)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at java.lang.reflect.Method.invokeNative(Native Method)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at java.lang.reflect.Method.invoke(Method.java:511)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:965)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:732)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at dalvik.system.NativeStart.main(Native Method)
11-01 11:38:13.507: E/AndroidRuntime(31297): Caused by: java.lang.IllegalStateException: The meta-data tag in your app's AndroidManifest.xml does not have the right value.  Expected 4030500 but found 0.  You must have the following declaration within the <application> element:     <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
11-01 11:38:13.507: E/AndroidRuntime(31297):    at com.google.android.gms.common.GooglePlayServicesUtil.n(Unknown Source)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at com.google.android.gms.common.GooglePlayServicesUtil.isGooglePlayServicesAvailable(Unknown Source)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at com.google.android.gms.internal.de.connect(Unknown Source)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at com.google.android.gms.appstate.AppStateClient.connect(Unknown Source)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at com.company.application.android.aja.BeetleBattleAndroidActivity.loginGooglePlus(BeetleBattleAndroidActivity.java:153)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at com.company.application.android.aja.BeetleBattleAndroidActivity.onCreate(BeetleBattleAndroidActivity.java:143)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.app.Activity.performCreate(Activity.java:4509)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
11-01 11:38:13.507: E/AndroidRuntime(31297):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041)
11-01 11:38:13.507: E/AndroidRuntime(31297):    ... 11 more

【问题讨论】:

我也有这个,因为今天发布了最新的 Android SDK 工具更新 如果您阅读完整的错误消息会有所帮助,因为它实际上非常清楚它所期望的内容。您可以直接将其复制粘贴到应用项目的清单中。 或安装并使用“Google Play Services for Froyo” 【参考方案1】:

您需要在清单中添加以下内容:

<application>
    <meta-data 
       android:name="com.google.android.gms.version" 
       android:value="@integer/google_play_services_version" />
    ...
</application>

编辑:

可以在 logcat 错误消息以及 Setting Up Google Play Services 上找到此信息(感谢 Brais Gabin)

【讨论】:

@ErichDouglass 是的,是的。 Set Up a Project that Uses Google Play Services。带有来源参考的答案总是更好;)。 感谢源代码,但如果您仔细查看 logcat,您也可以在那里获得信息 @Benoit 嗨,我遵循了这个答案,我收到了一个 logcat 错误,说 使用 google play 服务需要一个名为“com.google.android.gms.games.APP_ID”的元数据标签在清单的应用程序标签中 还有更多元数据标签,这看起来像是您在使用特定于服务的游戏部分的东西。检查他们的文档 您需要在清单中同时包含 。 1.用于 Goolge API 密钥 2.用于 google_play_services_version。【参考方案2】:

@Benoit'a 的答案有我正在用额外知识回答的确切解决方案:

1. Benoit 回答的一种方法是在AndroidManifest.xml 的应用程序标签内添加以下内容

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

2.我们可以像

这样直接添加版本代码
<meta-data android:name="com.google.android.gms.version" android:value="4030500" />

4030500 是存储在里面的版本代码

google-play-services_lib>res>values>version.xml

喜欢

<integer name="google_play_services_version">4030500</integer>

结论:最新的google play服务需要版本名,在AndroidManifest.xml里面用&lt;meta-data .. /&gt;注明

注意: 我强烈建议使用第一种方式

【讨论】:

@JanshairKhan google-play-services_lib&gt;res&gt;values&gt;version.xml 以前我在清单中有这个元数据标签:android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyC2IpI158TISY8sV6DyJUkIFv-L_kGpkwE" /> 我得到了此错误。您应用的 AndroidManifest.xml 中的元数据标记没有正确的值。我现在更改了元标记,出现此错误:原因:java.lang.RuntimeException:未找到 API 密钥。检查 是否在 AndroidManifest.xml 的 元素中【参考方案3】:

自从您提出这个问题后,一些事情发生了变化。如果您使用的是 Google Play 服务 7.0 或更高版本,Gradle 将自动合并清单并为您包含所需的元数据。

引用Ian Lake:

(...) Google Play 服务 如果您使用 Gradle,7.0 还具有另一个节省时间的功能:它会自动包含

<meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version"/>

您的 AndroidManifest.xml 中的条目 - 无需手动添加 它!简单清单合并的完美示例,图书馆可以 添加所需的元数据、接收者、权限和其他任何内容 需要 - 少一件事要忘记!

注意:这不适用于完整的播放服务或 play-services-all-wear AAR - 只有细粒度的 AAR 才有此功能 在。

【讨论】:

【参考方案4】:

我确实在包含的谷歌服务副本的 res/values 文件夹中创建了一个文件“version.xml”并粘贴了代码:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<integer name="google_play_services_version">4030500</integer>
</resources>

原件遗漏了文件,它确实解决了我的问题

【讨论】:

-1 不好的做法,因为您可能有不同版本的播放服务【参考方案5】:

只需确保将以下两个元数据标签添加到“您的”应用程序的 AndroidManifest.xml 中

<meta-data 
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="YOUR_API_KEY"/>
<meta-data 
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version"/>

这个解决方案对我有用。

【讨论】:

这个答案对一年多前已经存在和接受的答案没有任何意义。 是的,可能是。但是我关注了这个帖子,我很困惑。我们在谷歌播放服务库的清单文件中也有 。初学者可能会对是否在自己的应用程序的 androidManifest.xml 中添加此标签感到困惑(因为它已经在添加到我们项目库的 google play 服务库中可用,可能会导致重复)。我希望这两个陈述将对现有和接受的答案提供更多说明。 :) @vaaa:你最好将这个解释有机地融入答案中; cmets 的目的是相当一次性的。 至少,我已经发布了比现在作为评论发布的内容更好的内容...这个博客不是为了发布您的编码经验,它可能是任何形式的 cmets 或答案。 :)【参考方案6】:

我将现有项目从 Eclipse 导入到 Android Studio,在 Eclipse 项目中Integers.xml 包含如下硬编码值

<integer name="google_play_services_version">5089000</integer>

导致与 Android Studio 正在构建的最新版本的 Play Services 版本冲突。从Integers.xml 删除此行后,它开始为我工作。

【讨论】:

【参考方案7】:

如果你仍然有错误尝试这个。

它对我有用

<meta-data
    tools:replace="android:value"
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

【讨论】:

【参考方案8】:

在关闭&lt;application&gt; 标签后添加&lt;meta-data&gt;。这解决了我的问题

【讨论】:

以上是关于Google Play 服务更新到版本 13 后,出现错误的主要内容,如果未能解决你的问题,请参考以下文章

可以以编程方式更新 Google Play 服务吗?

Google Play 服务库更新和缺少符号 @integer/google_play_services_version

如何将google play服务添加到eclipse

Android 模拟器上的 Google Play 服务和 Google Play 游戏应用

Google Play Store App 的 Apache-Cordova 更新到 4.1.1 或更高版本,但它的

Google 地图活动 - 除非您更新 Google Play 服务,否则不会运行