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)
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
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.
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();
}
}
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.
En regardant cette partie ...
Didn't find class ... on path: DexPathList ...
dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.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.
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'
}
}
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
.
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