После обновления до Fabric Crashlytics иногда происходит сбой нативных программ с ошибкой java.lang.NoClassDefFoundError.

После последнего обновления Crashlytics с собственным приложением Fabric несколько раз происходит сбой (проверено на nexus 6 с Android 7.1.1)

То, что я вижу в консоли Google Play, это.

java.lang.NoClassDefFoundError: 
  at io.fabric.sdk.android.Kit.<init> (Kit.java:45)
  at com.crashlytics.android.answers.Answers.<init> (Answers.java:20)
  at com.crashlytics.android.Crashlytics.<init> (Crashlytics.java:29)
  at funler.com.funler.FunlerApplication.onCreate (FunlerApplication.java:27)
  at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1007)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:4344)
  at android.app.ActivityThread.access$1500 (ActivityThread.java:135)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1256)
  at android.os.Handler.dispatchMessage (Handler.java:102)
  at android.os.Looper.loop (Looper.java:136)
  at android.app.ActivityThread.main (ActivityThread.java:5017)
  at java.lang.reflect.Method.invokeNative (Native Method)
  at java.lang.reflect.Method.invoke (Method.java:515)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:779)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:595)
  at dalvik.system.NativeStart.main (Native Method)

конечно в funler.com.funler.FunlerApplication.onCreate (FunlerApplication.java:27)

У меня есть

Fabric.with(this, new Crashlytics());

Я обнаружил, что проблема связана с MultiDex.install(this), но в моем коде этого нет. Также видел кое-что, связанное с dexOptions, не знаю, что делать.

Большая проблема в том, что я не могу воспроизвести его так, как хотел, пытаясь на устройстве, это происходит ~ 1 очень 20 раз.

apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

ext {
        versionSdk = 25

        major = 3
        minor = 2
        patch = 5
}

def generateVersionCode(){

        return ext.versionSdk * 1000000 +
                        ext.major * 10000 +
                        ext.minor * 100 +
                        ext.patch;
}

android {

        compileSdkVersion 25
        buildToolsVersion '25.0.3'
        useLibrary 'org.apache.http.legacy'
        defaultConfig {
                applicationId .
                minSdkVersion 16
                targetSdkVersion 25
                versionCode generateVersionCode()
                versionName "${project.ext.major}.${project.ext.minor}.${project.ext.patch}"
                multiDexEnabled true

                .
        }
        productFlavors {
                .
        }
        buildTypes {
                .
        }
        dexOptions {
                jumboMode = true
        }
}


dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        // You must install or update the Support Repository through the SDK manager to use this dependency.
        compile 'com.android.support:support-core-ui:25.4.0'
        compile 'com.android.support:appcompat-v7:25.4.0'
        compile 'com.android.support:design:25.4.0'
        compile 'com.facebook.android:facebook-android-sdk:4.5.0'
        compile 'com.pnikosis:materialish-progress:1.5'
        compile 'com.nineoldandroids:library:2.4.0'
        compile('com.google.apis:google-api-services-youtube:v3-rev112-1.19.0') {
                exclude(group: 'com.google.code.findbugs', module: 'jsr305')
        }
        compile('com.google.api-client:google-api-client:1.18.0-rc') {
                exclude(module: 'jsr305')
        }
        compile 'io.branch.sdk.android:library:2.+'
        compile 'com.google.android.gms:play-services-gcm:8.1.0'
        compile 'com.mcxiaoke.volley:library:1.0.7'
        compile 'org.xwalk:xwalk_core_library:22.52.561.4'
        compile files('libs/MobileAppTracker-3.9.jar')
        compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
                transitive = true;
        }
        compile 'org.greenrobot:eventbus:3.0.0'
        provided files('amazon-device-messaging-1.0.1.jar')
}

configurations {
        compile.exclude module: 'jsr305'
}

buildscript {
        repositories {
                maven { url 'https://maven.fabric.io/public' }
        }

        dependencies {
                classpath 'io.fabric.tools:gradle:1.+'
        }
}

repositories {
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
}

repositories {
        maven {
                url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'
        }
}
repositories {
        maven { url 'http://download.crashlytics.com/maven' }
}

configurations.all {
        resolutionStrategy.eachDependency { details ->
                def requested = details.requested
                if (requested.group == 'com.android.support') {
                        if (!requested.name.startsWith("multidex")) {
                                details.useVersion '25.4.0'
                        }
                }
        }
}
...

person Martin Page    schedule 31.08.2017    source источник
comment
Используйте Build -> Clean Project перед запуском, иногда эта проблема действительно раздражает.   -  person Stanislav Bondar    schedule 31.08.2017
comment
Это происходит в живой сборке. Вы думаете, что это может быть исправлено таким же образом?   -  person Martin Page    schedule 31.08.2017
comment
Вы импортируете библиотеки Crashlytics и Fabric в файл, в котором вызываете Fabric.with?   -  person Alexizamerican    schedule 01.09.2017
comment
У меня есть импорт io.fabric.sdk.android.Fabric; и import com.crashlytics.android.Crashlytics; в этом файле, и он работает в 95% случаев.   -  person Martin Page    schedule 01.09.2017
comment
Хм, очень странно, что это происходит так редко. Есть ли шанс, что вы можете поделиться своим build.gradle?   -  person Alexizamerican    schedule 01.09.2017
comment
Конечно добавлен build.grundle   -  person Martin Page    schedule 01.09.2017
comment
Майк из Fabric здесь. К сожалению, я не вижу явной основной причины, поскольку ваш build.gradle выглядит правильно. Есть ли другие устройства или ОС, на которых это происходит? Кроме того, есть ли у вас какая-либо условная логика для реализации Fabric в приложении?   -  person Mike Bonnell    schedule 05.09.2017
comment
У меня нет ничего, кроме этого Fabric Init, никакой логики, какой бы то ни было, дело в том, что он вылетает каждые 10/20 раз ... нелегко воспроизвести   -  person Martin Page    schedule 07.09.2017
comment
@MartinPage, вы нашли решение этой проблемы? У меня точно такая же проблема с классом, который является частью библиотеки, разработанной моей компанией, и я использую ее в своем приложении. В моем случае это обычно происходит при обновлении приложения (переопределение APK более новым), при этом проблемный класс может существовать в обеих версиях приложения (это происходит как при обновлении со старой версии приложения без этого класса, так и при обновлении с новой версию, содержащую этот класс).   -  person Michael Kessler    schedule 01.10.2017
comment
Нет не нашел.   -  person Martin Page    schedule 10.11.2017


Ответы (1)


Это может быть вызвано минификацией кода (обфускацией). Если вы используете proguard (и проблема возникла в релизных сборках), вы можете проверить, не требует ли какая-либо библиотека, которую вы используете, добавления некоторых правил proguard вручную.

Удачи.

person Zohar    schedule 01.10.2017