web-dev-qa-db-fra.com

L'application se bloque lorsque j'applique des crashlytics dessus

L'application se bloque lorsque j'applique crashlytics dessus

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) 
24
Amir Jehangir

J'étais confronté au même problème, est lié à la limite de 64k "multidex".

J'utilisais multiDexEnabled true propriété dans build.gradle dans le bloc defaultConfig, sous Android one.

Comme indiqué dans documentation Google

pour les appareils avec API Android avant 21 , nous devons inclure la bibliothèque multidex (implementation 'com.Android.support:multidex:1.0.2')

et étendre MultiDexApplication dans notre classe Application

34
Alessandro Mautone

Nous avions le même problème, et la désactivation de l'exécution instantanée dans Android Studio semblait le faire fonctionner.

Sur mac Android Paramètres ou préférences de Studio -> Build, Execution, Deployment -> Instant Run.

10
Alistair Sykes

J'ai résolu ce problème en procédant comme suit:

Dans la classe Application:

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

Cela pourrait être un problème avec Instant Run. Désactivez l'exécution instantanée et exécutez à nouveau la génération. J'ai fait face au même problème et il l'a résolu.

7

En regardant cette partie ...

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

de la trace de la pile, vous pouvez comprendre que votre appareil de test est probablement pré-Lollipop (Android 5.0) et que vous venez d'atteindre la limite de 64k. Vous pouvez le réparer comme décrit ici.

7
Peppermint Paddy

Lorsque minifyEnabled a la valeur true lors de l'utilisation de firebase ou de crashlytics, ce problème peut se produire. L'activation de minifyEnabled réduit les noms de méthodes et de classes aux caractères les plus bas possibles (en changeant les noms et cela soulève ClassNotFoundException). Malheureusement, les versions firebase et crashlytics ont eu beaucoup de problèmes avec cela. Pour le résoudre, dites simplement à proguard de ne pas réduire ces classes en écrivant les lignes suivantes dans le fichier proguard "proguard-rules.pro" comme:

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

Maintenant, si le problème ne disparaît pas ou s'il n'a pas trouvé d'autres classes comme la vôtre, vérifiez la version des dépendances build.gradle de votre projet de base de gradle et d'autres. J'ai trouvé que cette version est exempte de cette erreur:

    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'

}

N'oubliez pas que vous pouvez mettre n'importe quel chemin de classe dans ce fichier proguard afin qu'il ne change pas son nom ou ses méthodes lorsque minify est activé, et cela vous aidera également avec d'autres classes "ClassNotFoundException".

Pour tester cela lors du débogage, vous pouvez également régler le paramètre de débogage dans build.gradle comme suit:

    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'
    }

}
4
MohammadL

Encore un cas:

Dans mon cas, j'ai désactivé l'exécution instantanée, ajouté multiDexEnabled true Dans mon gradle et ajouté le 'com.Android.support:multidex:1.0.3' À mes dépendances, appelé MultiDex.install(this); directement dans mon application personnalisée, mais je a toujours la même erreur. L'erreur ne se produit que dans le système Android 4.4. Tout fonctionne bien sur Android 7.0 et 9.0.

Enfin, le déplacement de la MultiDex.install(this); de la méthode onCreate(Context) vers la attachBaseContext(Context) a résolu mon problème.

Ainsi, vous devez appeler MultiDex.install(this); dans attachBaseContext(Context) au lieu de onCreate(Context) lorsque vous ne prévoyez pas d'étendre directement le MultiDexApplication.

1
Shouheng Wang

Si cela se produit lorsque vous exécutez avec minifyEnabled true, ajoutez cette règle dans votre proguard-rules.pro fichier:

-keep public class com.crashlytics.Android.CrashlyticsInitProvider
0
Minas Mina