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

Elv*_*ira 8 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)
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索了答案,但我没有找到任何答案.这是异常出现的点:

mGoogleApiClient = new GoogleApiClient.Builder(MyApplication.getContext())
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
Run Code Online (Sandbox Code Playgroud)

非常感谢!

编辑

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'
Run Code Online (Sandbox Code Playgroud)

根项目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()
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑2

使用Fabric,现在我可以看到受此问题影响的所有用户都在使用Android 4.x. 我不知道,Play服务的分发可能会被窃听.但它减少了具有此错误的设备数量.

Int*_*iya 2

你正在得到

致命异常:java.lang.NoClassDefFoundError:com/google/android/gms/internal/zzsa at com.google.android.gms.common.api.GoogleApiClient$Builder。(来源未知)

当 Java虚拟机在运行时无法找到编译时可用的特定类时,就会出现 Java 中的NoClassDefFoundError 错误。

老的

 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
}
Run Code Online (Sandbox Code Playgroud)

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

mGoogleApiClient = new GoogleApiClient.Builder(this)
Run Code Online (Sandbox Code Playgroud)

你应该尝试用你的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()
    }
}
Run Code Online (Sandbox Code Playgroud)

可以打电话咨询

  1. compile 'com.android.support:appcompat-v7:23.1.1'代替 v7:23+

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

编辑

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

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

使用 beta2 和 alpha-5 gradle 不会显示错误。但如果没有“应用插件:‘服务’”和‘类路径’,则不会为 GCM 生成 gcm_defaultSenderId

您可以检查获取实例 ID

您应该使用apply 插件