Java.lang.NoClassDefFoundError: Ошибка разрешения: Lcom / google / android / gms / common / internal / zzbq;

Моя среда:

React Native: 0,50,4

Android-студия: 3.1.1

Gradle: 4.6

Устройство: эмулятор Android (любая ОС Android)

Я обновляю свое текущее приложение для реагирования, чтобы начать использовать Firebase. Я использую пакет react-native-firebase для их интеграции, НО я совершенно уверен, что это не проблема, поскольку мои проблемы появляются до того, как я начинаю заниматься этим.

Вот некоторые из моих источников:

build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:3.1.2'
    }
}

allprojects {
    repositories {
        mavenLocal()
        jcenter()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        maven {
            url 'https://maven.google.com'
        }
        google()
    }
}

'app / build.gradle`:

apply plugin: "com.android.application"

import com.android.build.OutputFile

project.ext.react = [
    entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"

def enableSeparateBuildPerCPUArchitecture = false

def enableProguardInReleaseBuilds = false

android {
    compileSdkVersion 23
    buildToolsVersion '27.0.3'

    defaultConfig {
        applicationId "com.ourdailystrength.mobile.android"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    buildTypes {
        release {
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }
    }
    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            // For each separate APK per architecture, set a unique version code as described here:
            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
            def versionCodes = ["armeabi-v7a":1, "x86":2]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
}

dependencies {
    //compile(project(':react-native-firebase')) {
    //    transitive = false
    //}
    compile project(':react-native-config')
    compile project(':react-native-i18n')
    compile project(':react-native-vector-icons')
    compile project(':react-native-device-info')
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.facebook.react:react-native:0.50.4"  // From node_modules

    // firebase modules
    implementation "com.google.android.gms:play-services-base:12.0.1"
    implementation "com.google.firebase:firebase-core:12.0.1"

}

// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

apply plugin: 'com.google.gms.google-services'

После сборки и запуска приложения я получаю следующую ошибку:

           java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/internal/zzbq;
                  at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source:2)
                  at android.app.ActivityThread.installProvider(ActivityThread.java:6378)
                  at android.app.ActivityThread.installContentProviders(ActivityThread.java:5939)
                  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5856)
                  at android.app.ActivityThread.access$1100(ActivityThread.java:193)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1623)
                  at android.os.Handler.dispatchMessage(Handler.java:106)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6656)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
               Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.common.internal.zzbq" on path: DexPathList[[zip file "/data/app/com.ourdailystrength.mobile.android-mFoP1bOjnUTgeG_cDvnVkg==/base.apk"],nativeLibraryDirectories=[/data/app/com.ourdailystrength.mobile.android-mFoP1bOjnUTgeG_cDvnVkg==/lib/x86, /system/fake-libs, /data/app/com.ourdailystrength.mobile.android-mFoP1bOjnUTgeG_cDvnVkg==/base.apk!/lib/x86, /system/lib]]
                  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
                  at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                  at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source:2) 
                  at android.app.ActivityThread.installProvider(ActivityThread.java:6378) 
                  at android.app.ActivityThread.installContentProviders(ActivityThread.java:5939) 
                  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5856) 
                  at android.app.ActivityThread.access$1100(ActivityThread.java:193) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1623) 
                  at android.os.Handler.dispatchMessage(Handler.java:106) 
                  at android.os.Looper.loop(Looper.java:164) 
                  at android.app.ActivityThread.main(ActivityThread.java:6656) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 

Я попытался перейти с 12.0.1 на 15.0.0, и он собрал и запустил нормально, но когда дело дошло до отправки сообщения Firebase, он пожаловался на то, что сервисы Google Play устарели. Получил эту ошибку:

W/GooglePlayServicesUtil: Google Play services out of date.  Requires 12451000 but found 12446024
W/FA: Service connection failed: ConnectionResult{statusCode=SERVICE_VERSION_UPDATE_REQUIRED, resolution=null, message=null}
V/FA: Processing queued up service tasks: 1
E/FA: Discarding data. Failed to send event to service

Я запускал это на Android P, поэтому не думал, что сервисы Google Play устареют по этому поводу. Я не смог найти, где Google документирует выпуски сервисов Google Play, так как подозреваю, что 12.4.51.000 еще не существует.

Я пытался найти ответы на этот вопрос, но пока ничего не помогло. Все что угодно поможет. Спасибо!

Версия сервисов Play не привязана к версии Android. Воспроизведение обновляется на изображениях эмуляторов, на которых есть магазин воспроизведения - эти изображения вы должны использовать для работы с Firebase.

Doug Stevenson 14.04.2018 00:03

@DougStevenson Я пробовал использовать Nexus 5X, в котором установлен магазин Play, но он по-прежнему выдает ошибку NoClassDefFoundError.

Rob Avery IV 14.04.2018 00:47
5
2
2 427
1

Ответы 1

Я нашел решение.

  1. Обновите все до 15.0.0 в зависимостях. Да, он будет продолжать выдавать вам ошибку из-за устаревших сервисов Google Play, но это нормально.

  2. Создайте новый эмулятор с установленным магазином Google Play (пока я думаю, что это просто Nexus 5 и 5X).

  3. Откройте эмулятор и обновите сервисы Google Play. Вам нужно сначала открыть Google Play и войти в систему. Как только это будет сделано, вы должны получить уведомление об обновлении сервисов Google Play.

  4. После завершения обновления вы можете проверить в настройках, какая у вас версия и достаточно ли она новая (что должно).

  5. Удалите приложение и переустановите приложение. Теперь он должен работать.

Другие вопросы по теме