android - io fabric apikey
La aplicación se bloquea cuando aplico crashlytics en ella (8)
La aplicación se bloquea cuando aplico crashlytics
en ella
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)
Al mirar esta parte ...
Didn''t find class ... on path: DexPathList ...
dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
del seguimiento de la pila, puede descubrir que su dispositivo de prueba es probablemente pre-Lollipop (Android 5.0) y que acaba de alcanzar el límite de 64k. Puedes arreglarlo como se describe aquí.
Cuando minifyEnabled se cumple mientras se usa Firebase o crashlytics, este problema puede ocurrir. Al habilitar minifyEnabled, se contraen los métodos y los nombres de las clases a los caracteres más bajos posibles (cambiando los nombres y eso genera la excepción ClassNotFoundException). Desafortunadamente, las versiones firebase y crashlytics tuvieron muchos problemas con eso. Para resolverlo, simplemente diga a proguard que no reduzca esas clases escribiendo las siguientes líneas en el archivo de proguard "proguard-rules.pro" como:
-keep class com.crashlytics.** { *; }
-keep class com.google.firebase.*.* { *; }
Ahora, si el problema no desaparece o no encuentra otras clases como la suya, verifique la versión de dependle y otras de su proyecto base build.gradle dependencias. Encontré que esta versión está libre de ese error:
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''
}
Recuerde que puede poner cualquier ruta de clases en ese archivo de programa para que no cambie su nombre o sus métodos cuando está habilitado minify, y eso también lo ayudará con otras clases "ClassNotFoundException".
También para probar esto en la depuración, puede ajustar la configuración de depuración en build.gradle como:
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''
}
}
Estábamos teniendo el mismo problema, y deshabilitar la ejecución instantánea en Android Studio parecía que funcionaba.
En mac Configuración de Android Studio o Preferencias -> Compilación, Ejecución, Implementación -> Ejecución instantánea.
Estaba enfrentando el mismo problema, está relacionado con el límite de 64k "multidex".
Estaba usando la propiedad multiDexEnabled true
en build.gradle en el bloque defaultConfig
, en android
defaultConfig
.
Como se indica en la documentación de Google
para dispositivos con la API de Android anterior a 21 , debemos incluir la biblioteca multidex ( implementation ''com.android.support:multidex:1.0.2''
)
y extender MultiDexApplication
en nuestra clase de aplicaciones
Esto podría ser un problema con la ejecución instantánea. Desactive la ejecución instantánea y vuelva a ejecutar la compilación. Me enfrenté al mismo problema y lo resolví.
He resuelto este problema haciendo lo siguiente:
En la clase de aplicación:
@Override
public void attachBaseContext(Context base) {
super.attachBaseContext(base);
try {
MultiDex.install(this);
} catch (RuntimeException multiDexException) {
multiDexException.printStackTrace();
}
}
Si esto sucede cuando ejecuta minifyEnabled true
, agregue esta regla en su archivo proguard-rules.pro
:
-keep public class com.crashlytics.android.CrashlyticsInitProvider
Solo un caso más:
En mi caso, deshabilité la ejecución instantánea, agregué multiDexEnabled true
en mi gradle y agregué el ''com.android.support:multidex:1.0.3''
a mis dependencias, llamado MultiDex.install(this);
directamente en mi aplicación personalizada, pero sigo teniendo el mismo error. El error solo se produce en el sistema Android 4.4. Todo funciona bien en Android 7.0 y 9.0.
Finalmente, moviendo el MultiDex.install(this);
desde el onCreate(Context)
hasta el attachBaseContext(Context)
resolví mi problema.
Por lo tanto, debe llamar a MultiDex.install(this);
en attachBaseContext(Context)
lugar de onCreate(Context)
cuando no planea extender la aplicación MultiDexApplication
directamente.