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
4

8 回答 8

154

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

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

编辑:

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

于 2013-11-01T09:24:53.907 回答
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 .. />结论:最新的google play服务需要一个版本名,使用里面要提到AndroidManifest.xml

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

于 2013-11-06T13:53:31.963 回答
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 中为您输入 - 无需手动添加!简单 Manifest 合并的完美示例,其中库可以添加所需的元数据、接收器、权限以及他们需要的任何其他内容 - 少一件要忘记的事情!

注意:这不适用于完整播放服务或播放服务全磨损 AAR - 只有粒度 AAR 具有此内置功能。

于 2015-08-16T21:24:17.160 回答
2

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

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

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

于 2013-12-06T02:02:36.813 回答
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"/>

这个解决方案对我有用。

于 2015-04-08T19:41:56.417 回答
2

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

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

导致与 Android Studio 正在构建的最新版本的 Play 服务发生版本冲突。从它删除这条线后Integers.xml开始为我工作。

于 2015-07-08T12:06:27.263 回答
1

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

它对我有用

<meta-data
    tools:replace="android:value"
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />
于 2018-09-10T00:26:31.777 回答
-1

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

于 2014-02-21T17:36:26.153 回答