Приложение падает, когда я применяю к нему крахлитики

Приложение падает, когда я применяю к нему crashlytics

FATAL EXCEPTION: main

Process: com.ehs.pk, PID: 20963
java.lang.RuntimeException: Unable to get provider com.crashlytics.android.CrashlyticsInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.crashlytics.android.CrashlyticsInitProvider" on path: DexPathList[[zip file "/data/app/com.ehs.pk-8.apk"],nativeLibraryDirectories=[/data/app-lib/com.ehs.pk-8, /vendor/lib, /system/lib]]
    at android.app.ActivityThread.installProvider(ActivityThread.java:4993)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4585)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4499)
    at android.app.ActivityThread.access$1500(ActivityThread.java:157)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:157)
    at android.app.ActivityThread.main(ActivityThread.java:5293)
    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:1265)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.crashlytics.android.CrashlyticsInitProvider" on path: DexPathList[[zip file "/data/app/com.ehs.pk-8.apk"],nativeLibraryDirectories=[/data/app-lib/com.ehs.pk-8, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at android.app.ActivityThread.installProvider(ActivityThread.java:4978)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4585) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4499) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:157) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:157) 
    at android.app.ActivityThread.main(ActivityThread.java:5293) 
    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:1265) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
    at dalvik.system.NativeStart.main(Native Method) 

Ответ 1

Я столкнулся с той же проблемой, связан с лимитом 64k "multidex".

Я использовал свойство multiDexEnabled true в build.gradle в блоке defaultConfig, под android one.

Как указано в документации Google

для устройств с API Android до 21 года нам нужно включить библиотеку multidex (implementation 'com.android.support:multidex:1.0.2')

и расширьте MultiDexApplication в нашем классе Application

Ответ 2

У нас была такая же проблема, и отключение мгновенного запуска в Android Studio, похоже, заработало.

В Mac Настройки или Настройки Android → Сборка, Исполнение, Развертывание → Мгновенный запуск.

Ответ 3

Посмотрев на эту часть...

Didn't find class... on path: DexPathList... dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoade‌​r.java:67)

трассировки стека вы можете понять, что ваше тестовое устройство, вероятно, пред-Lollipop (Android 5.0), и что вы просто достигли предела 64k. Вы можете исправить это, как описано здесь.

Ответ 4

Я решил эту проблему, выполнив следующие действия:

В классе Application:

@Override
public void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    try {
        MultiDex.install(this);
    } catch (RuntimeException multiDexException) {
        multiDexException.printStackTrace();
    }
}

Ответ 5

Это может быть проблемой с Instant Run. Выключите Instant Run и снова запустите сборку. Я столкнулся с той же проблемой, и он ее разрешил.

Ответ 6

Когда minifyEnabled истинно при использовании firebase или crashlytics, эта проблема может произойти. Включение minifyEnabled сжимает методы и имена классов до минимально возможных символов (изменение имен и повышение класса ClassNotFoundException). К сожалению, у версий firebase и crashlytics было много проблем с этим. Чтобы решить это, просто сообщите proguard, чтобы не сжимать эти классы, написав следующие строки в файле proguard "proguard-rules.pro" как:

-keep class com.crashlytics.** { *; }
-keep class com.google.firebase.*.* { *; }

Теперь, если проблема не исчезнет, или она не найдет другие классы, подобные вашим, тогда проверьте версию базового проекта build.gradle зависимостей версии gradle и других. Я нашел, что в этой версии нет этой ошибки:

    dependencies {
    classpath 'com.android.tools.build:gradle:3.0.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.2.0'
    classpath 'io.fabric.tools:gradle:1.25.1'

}

Помните, что вы можете поместить любой путь классов в этот файл proguard, чтобы он не менял свое имя или методы при включении minify, и это также поможет вам с другими классами ClassNotFoundException.

Кроме того, чтобы проверить это при отладке, вы можете настроить параметры отладки в файле build.gradle как:

    buildTypes {
    release {
        debuggable false
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

    debug {
        debuggable true
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

}

Ответ 7

Если это происходит при запуске с minifyEnabled true, добавьте это правило в свой файл proguard-rules.pro:

-keep public class com.crashlytics.android.CrashlyticsInitProvider

Ответ 8

Еще один случай:

В моем случае я отключил мгновенный запуск, добавил multiDexEnabled true в своем gradle и добавил 'com.android.support:multidex:1.0.3' в мои зависимости, называемые MultiDex.install(this); непосредственно в моем приложении, но я все еще получил ту же ошибку. Ошибка возникает только в системе Android 4.4. Все хорошо работает на Android 7.0 и 9.0.

Наконец, перемещение MultiDex.install(this); из onCreate(Context) в attachBaseContext(Context) решил мою проблему.

Итак, вам следует вызвать MultiDex.install(this); в attachBaseContext(Context) вместо onCreate(Context) если вы не планируете расширять MultiDexApplication напрямую.