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


70

如何解决此错误?

原因:java.lang.illegalargumentexception 11-01 11:08:12.845:E / AndroidRuntime(28885):原因: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 ComponentInfo{com.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

1
自今天发布的最新Android SDK工具更新以来,我也拥有此功能
Ivo Beckers

7
如果您阅读完整的错误消息,它会有所帮助,因为从期望的角度来看,它实际上很清楚。您可以直接将其复制粘贴到应用程序项目的清单中。
MH。

2
或安装并使用“ Froyo的Google Play服务”
蒂姆(Tim)

Answers:


154

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

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

编辑:

可以在logcat错误消息以及设置Google Play服务中 找到此信息(感谢Brais Gabin)


4
@ErichDouglass是的。设置一个使用Google Play服务的项目。带有参考源的答案总是更好;)。
Brais Gabin 2013年

谢谢,但是如果您仔细查看日志猫,也可以在此处获取信息
Benoit 2013年

2
@Benoit嗨,我遵循了这个答案,但出现了一条logcat错误,提示您使用清单
播放器

元数据标签更多,这一标签看起来像您正在使用特定于服务的游戏部分的标签。检查他们的文档
Benoit 2014年

您需要在清单中同时包含两个<meta-data />。1.适用于Goolge API密钥2.适用于google_play_services_version。
Raj Trivedi 2014年

23

@ 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>

结论:谷歌最新的播放服务,需要一个版本的名称,这是使用被提及<meta-data .. />AndroidManifest.xml

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


@JanshairKhangoogle-play-services_lib>res>values>version.xml
Tarsem Singh

以前,我在清单文件中包含此元数据标记:android:name =“ com.google.android.maps.v2.API_KEY” android:value =“ AIzaSyC2IpI158TISY8sV6DyJUkIFv-L_kGpkwE” />我收到了此错误。应用程式的AndroidManifest.xml中的值不正确。我现在收到此错误,因此更改了meta标签:原因:java.lang.RuntimeException:未找到API密钥。检查<meta-data android:name =“ com.google.android.maps.v2.API_KEY” android:value =“您的API密钥” />是否在AndroidManifest.xml的<application>元素中
ozmank

4

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

引用伊恩湖

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

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

为您输入AndroidManifest.xml中的条目-无需手动添加!简单清单合并的完美示例,库可以添加所需的元数据,接收者,许可权以及他们需要的其他任何内容-少一件事!

注意:这不适用于完整的播放服务或全磨损播放服务AAR-只有内置的颗粒AAR。


2

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

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

原始副本错过了文件,它确实解决了我的问题


1
-1不良习惯,因为您可能拥有其他版本的播放服务
Benoit 2013年

2

只要确保将以下两个元数据标签添加到“您的”应用程序的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"/>

这个解决方案对我有用。


这个答案对一年多来已经存在并被接受的答案没有任何意义。
Mephy 2015年

也许吧 。但是我跟踪了帖子,我感到困惑。我们在Google Play服务库的清单文件中也有<meta-data android:name =“ com.google.android.gms.version” android:value =“ @ integer / google_play_services_version” />。初学者可能会对是否在自己的应用的androidManifest.xml中添加此标记感到困惑(因为已在添加到我们项目库中的Google Play服务lib中提供了此标记,可能会导致重复)。我希望这两句话将对现有的和被接受的答案提供更多的说明。:)
vaaa 2015年

@vaaa:您最好将这种解释有机地纳入答案;评论是相当随意的。
内森·塔吉

Atleast,我发布的东西比立即发表评论更好。。。这个博客不是要发布您的编码经验,它可以是任何形式的评论或答案。:)
vaaa 2015年

2

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

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

导致与Android Studio正在构建的Play服务的最新版本发生版本冲突。从该行删除后,Integers.xml对我来说开始工作。


1

如果仍然有错误,请尝试此操作。

它对我有用

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

-1

添加<meta-data>结束后<application>标签。这解决了我的问题

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.