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

时间:2016-01-29 11:48:05

标签: java android google-api google-api-client

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

对于此任务,我将IntentService与WakefulBroadcastReceiver一起使用(每小时获取一次位置)。一切都在开发环境中运行良好,但在Play商店中部署时,某些设备会收到此错误:

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)

我在互联网上搜索了答案,但我找不到任何东西。这是异常出现的地方:

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

非常感谢!

修改

app 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.也许播放服务的分发是错误的,我不知道。但它减少了出现此错误的设备数量。

3 个答案:

答案 0 :(得分:2)

您正在

  

致命异常:java.lang.NoClassDefFoundError:   COM /谷歌/机器人/克/内部/ ZZSA          在com.google.android.gms.common.api.GoogleApiClient $ Builder。(未知   源)

Java虚拟机 无法在运行时找到特定的类时,Java中会出现

NoClassDefFoundError 编译时间。

<强> OLD

 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

  

顶级构建文件,您可以在其中添加常用的配置选项   所有子项目/模块。

    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()
    }
}

<强>建议 你可以打电话

  1. compile 'com.android.support:appcompat-v7:23.1.1'而不是 v7:23+
  2. 然后 Clean-Rebuild-Restart-Sync Your Project 。希望这有帮助。

    修改

      

    Android构建系统包含Gradle的Android插件。   Gradle是一个高级构建工具包,可以管理依赖关系和   允许您定义自定义构建逻辑。 Android Studio使用Gradle   包装器完全集成Gradle的Android插件。 Android   Gradle的插件也独立于Android Studio运行。

    插件只是实现插件接口的任何类。 Gradle提供核心插件作为其分发的一部分,因此只需应用上述插件就可以了。

      

    使用beta2和alpha-5 gradle dosen显示错误。但没有&#34;申请   插件:&#39;服务&#39;&#34;和&#39; classpath&#39;它没有生成   GCM的gcm_defaultSenderId

    您可以查看 Get an Instance ID

    您应该使用应用插件

答案 1 :(得分:0)

这显然是gms(Google Play服务)的程序配置错误。

  • 它可能是由您构建的错误版本引起的,您可以针对另一个版本构建。
  • 或者它是由设备上安装的Play服务引起的,您只能希望Play服务团队停止使用此版本,直到错误修复为止。

答案 2 :(得分:0)

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

void readALine(FILE * file) {

    char buffer[1000];

    while(fgets(buffer,sizeof(buffer),file) != NULL) {

        if(!isspace(buffer[0]) { //note the not operator
            //I'm guessing isspace checks for a newline character since otherwise this will be true also for lines beginning with space
            continue; //run the same loop again
        }
        break;
    }

    //buffer contains the next line except for empty ones here...


}

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

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

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

classdeferror已经解决了!