Android GoogleAPIClient – NoClassDefFoundError:com / google / android / gms / internal / zzsa

我正在开发一个应用程序,使用GoogleAPIClient(显然)获取用户当前位置在后台。

为了完成这个任务,我使用了带有WakefulBroadcastReceiver的IntentService(每小时获取位置)。 在开发环境中一切正常,但在Play Store中部署时,有些设备出现此错误:

Fatal Exception: java.lang.NoClassDefFoundError: com/google/android/gms/internal/zzsa at com.google.android.gms.common.api.GoogleApiClient$Builder.<init>(Unknown Source) at tellerina.com.br.vivara.services.MyService.onHandleIntent(MyService.java:37) at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:157) at android.os.HandlerThread.run(HandlerThread.java:61) 

我已经search了互联网的答案,但我没有find任何东西。 以下是出现exception的地方:

 mGoogleApiClient = new GoogleApiClient.Builder(MyApplication.getContext()) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); 

非常感谢!

编辑

应用程序build.gradle

 buildscript { repositories { maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'io.fabric.tools:gradle:1.21.2' } } apply plugin: 'com.android.application' apply plugin: 'io.fabric' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "app.package" minSdkVersion 14 targetSdkVersion 22 versionCode 9 versionName "1.5.2" multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dexOptions { javaMaxHeapSize "4g" } } repositories { mavenCentral() maven { url 'https://maven.fabric.io/public' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile fileTree(dir: 'libs', include: ['*.so']) compile(project(':volley')) { exclude module: 'support-v4' } compile files('libs/commons-codec-1.9.jar') compile('com.navercorp.volleyextensions:volley-views:2.0.+') { exclude module: 'library' } compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') { transitive = true; } compile 'com.android.support:appcompat-v7:23+' compile 'com.android.support:cardview-v7:23+' compile 'com.android.support:recyclerview-v7:23+' compile 'com.google.code.gson:gson:2.3.1' compile 'io.card:android-sdk:5.1.1' compile 'com.github.ksoichiro:androidpagecontrol:0.1.1' compile 'me.relex:circleindicator:1.1.5@aar' compile 'com.nineoldandroids:library:2.4.0' compile 'com.daimajia.easing:library:1.0.1@aar' compile 'com.daimajia.androidanimations:library:1.1.3@aar' compile 'com.facebook.android:facebook-android-sdk:4.5.0' compile 'br.com.jansenfelipe:androidmask:1.0.1' compile 'com.google.android.gms:play-services:8.4.0' compile 'com.android.support:multidex:1.0.0' compile 'com.android.support:design:23+' compile 'com.squareup.picasso:picasso:2.5.2' } apply plugin: 'com.google.gms.google-services' 

根项目build.gradle

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.5.0' classpath 'com.google.gms:google-services:+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } 

编辑2

使用Fabric,现在我可以看到所有受此问题影响的用户都使用Android 4.x. 也许播放服务的分布是窃听,我不知道。 但是这减less了这个错误的设备数量。

Solutions Collecting From Web of "Android GoogleAPIClient – NoClassDefFoundError:com / google / android / gms / internal / zzsa"

你越来越

致命exception:com.google.android.gms.common.api.GoogleApiClient $ Builder中的java.lang.NoClassDefFoundError:com / google / android / gms / internal / zzsa。(Unknown Source)

Java中的NoClassDefFoundError出现在Java虚拟机无法在运行时find在编译期间可用的特定类。

  dependencies { // classpath 'com.android.tools.build:gradle:1.5.0' // classpath 'com.google.gms:google-services:+' //(Avoid Calling "+") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } 

GoogleApiClient与各种静态方法一起使用。 其中一些方法要求连接GoogleApiClient,有些会在GoogleApiClient连接之前排队;

 mGoogleApiClient = new GoogleApiClient.Builder(this) 

你应该试试你的build.gradle

顶级构build文件,您可以在其中添加对所有子项目/模块通用的configuration选项。

  buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta2' classpath 'com.google.gms:google-services:2.0.0-beta2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } 

build议你可以打电话

  1. compile 'com.android.support:appcompat-v7:23.1.1'而不是v7:23+

然后Clean-Rebuild-Restart-Sync Your Project希望这有助于。

编辑

Android构build系统由一个Gradle的Android插件组成。 Gradle是一个高级构build工具包,用于pipe理依赖关系,并允许您定义自定义构build逻辑。 Android Studio使用Gradle包装来完全集成Gradle的Android插件。 Gradle的Android插件也独立于Android Studio运行。

一个插件就是任何实现插件接口的类。 Gradle提供核心插件作为其发行版的一部分,所以你只需要简单地使用上面的插件即可。

与beta2和alpha-5 gradle dosen't显示错误。 但是没有“apply plugin:'services'”和“classpath”,没有生成gcm_defaultSenderId for GCM

您可以检查获取实例ID

你应该使用apply插件

这显然是gms(Google Play Services)的一个proguardconfiguration错误。

  • 要么是由于您构build的版本错误而导致的,您可以针对另一个版本进行构build。
  • 或者这是由设备上安装的Play服务引起的,您只能希望Play服务团队停止使用此版本,直到问题得到解决。

最后! 我花了几个小时试图解决这个问题,也许它已经被解决,但事实certificate,你使用的任何谷歌类都必须是在相同的相同的版本,即

  compile 'com.google.android.gms:play-services-identity:7.8.0' compile 'com.google.android.gms:play-services-location:7.5.0' 

我打电话给两个不同的版本。 一旦我偶然发现这一点:

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

classdeferror已解决!