Приложение падает, когда я применяю к нему крахлитики
Приложение падает, когда я применяю к нему 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(BaseDexClassLoader.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
напрямую.