Google Play Services V2库中的NoClassDefFoundError

key*_*fer 46 android google-maps google-play-services

在遵循官方教程后尝试使用Google Play Services V2库时出现以下异常.

java.lang.NoClassDefFoundError: com.google.android.gms.R$string
at com.google.android.gms.common.GooglePlayServicesUtil.b(Unknown Source)
at com.google.android.gms.common.GooglePlayServicesUtil.a(Unknown Source)
at com.google.android.gms.common.GooglePlayServicesUtil.getErrorDialog(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?

Ram*_*amz 34

我也有同样的问题,我正确地按照步骤,能够解决这个问题

首先(从Google Developer Console设置项目) 转到API控制台 - Google Code

创建项目如图所示 在此输入图像描述

单击"创建",然后您将要求添加项目名称,如图所示

在此输入图像描述

一旦你创建项目的时候选择我们需要使用的服务,在这种情况下我们需要android v2 map,所以从Service As中选择Google Maps Android API v2,如图所示,在此输入图像描述

现在转到Api Access并创建您的OAuth 2.0.在相应的字段中提供您的包名称和SHA1指纹. 在此输入图像描述

完成OAuth 2.0后,我们就可以使用您的API密钥了 在此输入图像描述

现在创建一个Android项目,其中包含在创建OAuth 2.0时使用的相同包名称.并检查您是否在Android SDK Manager中使用Google Play服务,否则请安装Google Play服务. 在此输入图像描述

安装Google Playservice后,您将在Android YourSdkpath\extras\google\google_play_services中找到一个Google Play库.导入该项目到您的工作区并将其作为参考库提供给您的项目 在此输入图像描述

在此输入图像描述

在此输入图像描述

之后,将相应的java和xml文件放入项目中.

MainActivity.java

package yourpackage;//Package name used while creating the Api key


import com.google.android.gms.common.ConnectionResult;
 import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;

import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;

public class MainActivity extends FragmentActivity {
GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Getting status
    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

    // Showing status
    if(status==ConnectionResult.SUCCESS)
    {
        SupportMapFragment supportMapFragment = (SupportMapFragment) 
                getSupportFragmentManager().findFragmentById(R.id.map);

        // Getting a reference to the map
        googleMap = supportMapFragment.getMap();
    }
    else{

        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
        dialog.show();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}
Run Code Online (Sandbox Code Playgroud)

activity_main.xml中

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/map"
   android:name="com.google.android.gms.maps.SupportMapFragment"
   android:layout_width="wrap_content"
   android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="yourpackage"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />
   <permission
    android:name="yourpackage.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>

<uses-permission android:name="yourpackage.permission.MAPS_RECEIVE"/>

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="yourpackage.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
      <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="YourAPIkey"/>
Run Code Online (Sandbox Code Playgroud)

希望它会对你有所帮助

  • 添加一个元数据标签<meta-data android:name ="com.google.android.gms.version"android:value ="@ integer/google_play_services_version"/>避免错误java.lang.IllegalStateException:元数据应用程序的AndroidManifest.xml中的标记没有正确的值.预期4030500但找到0.您必须在<application>元素中包含以下声明:<meta-data android:name ="com.google.android.gms.version"android:value ="@ integer/google_play_services_version"/> (2认同)

小智 32

版本2包含资源,必须作为库项目导入.有关如何在各种IDE中执行此操作,请参阅http://developer.android.com/google/play-services/setup.html上的说明.

这些资源适用于GooglePlayServicesUtil.getErrorDialog(),用于指导用户安装,更新,启用Google Play服务(如果设备上没有该服务).

  • 不完全是"各种IDE" - 它涵盖了Eclipse和CLI,就是这样. (8认同)

小智 11

对于Android Studio:

1)打开模块设置:

2)从SDK添加(导入)模块google_play_service_lib

图片

3)模块google_play_service_lib检查为库

4)从SDK添加库google_play_service.jar

5)完成

图片