Google Play Services V2库中的NoClassDefFoundError

遵循官方教程后,尝试使用Google Play服务V2库时,出现以下exception。

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) 

我哪里做错了?

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

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

我也有同样的问题一次,我正确的步骤,并能够解决这个问题

首先(从Google Developer Console设置您的项目)转到API控制台 – Google代码

创build一个项目如图所示 在这里输入图像描述

点击创build,然后你会问如图所示添加一个项目名称

在这里输入图像描述

一旦你创build你的项目的时候,select我们需要使用什么服务,在这种情况下,我们需要android v2地图,所以从服务中select谷歌地图Android API v2如图所示, 在这里输入图像描述

现在进入Api Access并创build您的OAuth 2.0。在相应的字段中提供您的软件包名称和SHA1指纹。 在这里输入图像描述

一旦你完成了OAuth 2.0,我们准备使用你的API密钥 在这里输入图像描述

现在使用创buildOAuth 2.0时使用的包名称创build一个Android项目。 并检查您是否有Android SDKpipe理器中的谷歌播放服务 ,否则安装谷歌播放服务。 在这里输入图像描述

安装Google playservice后,您会在Your Android YourSdkpath \ extras \ google \ google_play_services中find一个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; } } 

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" /> 

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"/> 

希望它会帮助你

对于Android Studio:

1)打开模块设置:

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

图片

3)模块google_play_service_lib检查为库

4)从SDK添加库google_play_service.jar

5)完成

图片

如果您已经升级了SDK,并得到这样的错误,请记住:

  • 如果您在eclipse项目中复制了这个文件,请使用google-play-services.jar的新版本
  • project.properties中设置target = android-19
  • 对于较新的API(我使用API​​ 19),您可能需要添加以下代码

AndroidManifest.xml中

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

如上所述,我还使用我们的SDK \ extras \ google \ google_play_services作为Eclipse库导入。

我通过在导入Google Play服务库时检查“将项目复制到工作区”来解决此错误。
更多信息在这里: http : //developer.android.com/google/play-services/setup.html

如果你正在使用

 compile 'com.google.android.gms:play-services:9.0.2' 

把它改成个人的,比如

 compile 'com.google.android.gms:play-services-location:9.0.2' 

如果你有multiDexEnabled=true也加上compile 'com.android.support:multidex:1.0.1'

在没有Gradle的情况下构build项目时,我遇到了与Android Studio相同的问题。 这可能是GooglePlayService项目中AndroidManifest.xml中包名的问题。 它应该是package =“com.google.android.gms”

我将Library Project添加为“新模块”而不是“导入模块”时出现问题

在这里输入图像描述

当你selectNew Module时,Android Studio显示对话框来指定“Module name”和“Package name”,默认情况下“Package name”看起来像是“com.example.MODULE_NAME_YOU_SPECIFED”,这是错误的 。 错过它很容易,因为项目会成功。

在这里输入图像描述

当您通过“导入模块”添加库项目时,一切都应该可以,因为Android Studio只需添加项目,而不用对Library Project的源代码进行任何更改。

我也面临同样的问题。 如果你在模拟器中运行你的应用程序,那么可能会面临这个错误,因为在大多数模拟器中没有安装google playService(Play商店应用程序)。

所以尝试在安装了playService应用程序的Android设备上运行你的应用程序。

解决方法: – 在try...catch添加错误部分代码,然后尝试在模拟器中工作。

注意: – Google消息传递服务需要palyservice。 否则抛出错误SERVICE_NOT_AVAILABLE