Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用crashlytics时应用程序崩溃_Android_Android Gradle Plugin_Crashlytics_Crashlytics Android - Fatal编程技术网

Android 应用crashlytics时应用程序崩溃

Android 应用crashlytics时应用程序崩溃,android,android-gradle-plugin,crashlytics,crashlytics-android,Android,Android Gradle Plugin,Crashlytics,Crashlytics Android,当我对应用程序应用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.crashlyti

当我对应用程序应用
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) 

通过看这部分

未找到类。。。在路径上:DexPathList…
dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoade‌​r、 java:67)


在堆栈跟踪中,您可以发现您的测试设备可能是pre-Lollipop(Android 5.0),并且您刚刚达到64k限制。您可以按所述进行修复

我遇到了相同的问题,与64k限制“multidex”有关

我在
defaultConfig
块的
android
one下的build.gradle中使用了
multiDexEnabled true
属性

如中所述

对于使用21之前的Android API的设备,我们需要包括multidex库(
implementation'com.Android.support:multidex:1.0.2'


并在我们的应用程序类中扩展
MultiDexApplication
我通过执行以下操作解决了此问题:

在应用程序类中:

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

使用firebase或crashlytics时,如果minifyEnabled为true,则可能会发生此问题。启用minifyEnabled会将方法和类名称收缩到尽可能少的字符(更改名称并引发ClassNotFoundException)。不幸的是,firebase和crashlytics版本在这方面有很多问题。要解决这个问题,只需告诉proguard不要收缩这些类,方法是在proguard文件“proguard rules.pro”中写入以下行:

现在,如果问题没有消失,或者找不到与您类似的其他类,那么请检查您的基本项目build.gradle dependencies版本的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'
    }

}

我们也遇到了同样的问题,在Android Studio中禁用instant run似乎可以让它正常工作

在mac上
Android Studio设置或首选项->构建、执行、部署->即时运行。

这可能是即时运行的问题。关闭即时运行,然后再次运行生成。我面对同样的问题,它解决了它

如果在使用
minifyEnabled true
运行时发生这种情况,请将此规则添加到
proguard rules.pro
文件中:

-keep public class com.crashlytics.android.CrashlyticsInitProvider
再举一个例子:

在我的例子中,我禁用了instant run,在我的gradle中添加了
multidex enabled true
,并将
'com.android.support:multidex:1.0.3'
添加到我的依赖项中,称为
multidex.install(此)直接在我的自定义应用程序中,但我仍然得到相同的错误。该错误仅发生在Android 4.4系统中。在安卓7.0和9.0上一切都运行良好

最后,移动
MultiDex.install(这个)
onCreate(Context)
方法到
attachBaseContext(Context)
解决了我的问题


因此,您应该调用
MultiDex.install(this)MultiDexApplication
时,请在
attachBaseContext(Context)
中进行编码,而不是在
onCreate(Context)
中进行编码。

添加更多信息,如编码或如何包含Crashlytics。例如,发布build.gradle文件。尝试清理并重建代码!你可能已经达到了64k的极限“multidex”@paolomastangelo我想正是因为这个
没有找到类。。。路径:DexPathList
和这个
dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
行谢谢你的工作。我对Android API 26及以上版本、Android Studio 3有这样的问题。1@neobie我更新时也得到了同样的结果,使用multidex似乎没有帮助。你解决了吗?@fuskren你的最小API级别是多少?@PeppermintPaddyIts它是15,但它在任何版本上都会在开始时直接崩溃。@fuskren我正在为那些导致错误的库添加更多的proguard规则。。不知道为什么只有在Android Studio 3.1之后才会发生这种情况。这些都是过于宽泛的proguard规则。我不认为你需要保留所有Crashlytics和所有Firebase来解决原始问题。如果有人在API级别高于21的情况下面临此问题,请查看。当我在API 27 Android Pie上面对这个问题时
-keep public class com.crashlytics.android.CrashlyticsInitProvider