【问题标题】:Crashlytics Fabric : Failed to execute taskCrashlytics Fabric:无法执行任务
【发布时间】:2015-11-18 18:47:49
【问题描述】:

我遇到了问题,不知道如何解决。

我的项目使用 crashlytics,但它总是崩溃且未发送报告。我有一个超时异常:

08-25 03:04:31.876    2856-2856/connectivit.app E/Fabric﹕ Failed to execute task.
java.util.concurrent.TimeoutException
        at java.util.concurrent.FutureTask.get(FutureTask.java:176)
        at com.crashlytics.android.core.CrashlyticsExecutorServiceWrapper.executeSyncLoggingException(CrashlyticsExecutorServiceWrapper.java:44)
        at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:275)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
--------- beginning of crash
08-25 03:04:31.876    2856-2856/connectivit.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: connectivit.app, PID: 2856
java.lang.RuntimeException: Unable to start activity ComponentInfo{connectivit.app/connectivit.app.Activity.Main.MainActivity}: java.lang.RuntimeException: This is a crash
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: java.lang.RuntimeException: This is a crash
        at connectivit.app.Activity.Main.MainActivity.initTabs(MainActivity.java:117)
        at connectivit.app.Activity.Main.MainActivity.onCreate(MainActivity.java:57)
        at android.app.Activity.performCreate(Activity.java:5933)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

编辑

我的 build.gradle 文件:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url "https://jitpack.io" }
    maven { url 'https://maven.fabric.io/public' }
}

android {
    signingConfigs {
        release {
            keyAlias 'android.keystore'
            storeFile file('/Users/jordan/android.keystore.jks')
            storePassword ""
            keyPassword ""
        }
        config {
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storeFile file('/Users/jordan/.android/debug.keystore')
            storePassword 'android'
        }
    }
    compileSdkVersion 23
    buildToolsVersion '23'
    defaultConfig {
        applicationId “com.test"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 12
        versionName '1'

        // Enabling multidex support.
        multiDexEnabled true
    }

    buildTypes {
        debug {
            versionNameSuffix "-DEBUG"
        }
        release {
            minifyEnabled true
            zipAlignEnabled true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
    packagingOptions {
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    lintOptions {
        // set to true to turn off analysis progress reporting by lint
        quiet false
        // if true, stop the gradle build if errors are found
        abortOnError false
        // if true, only report errors
        ignoreWarnings true
    }
    productFlavors {
    }
}

dependencies {
    //--- Android
    compile 'com.android.support:design:23.0.0'
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'com.android.support:multidex:1.0.0'

    //--- Fabric
    compile('com.crashlytics.sdk.android:crashlytics:2.4.0@aar') {
        transitive = true;
    }
}

Crashlytics 初始化:

public class MyApplication extends MultiDexApplication {

 @Override
public void onCreate() {
    super.onCreate();

    Fabric.with(this, new Crashlytics());

    if (!BuildConfig.DEBUG) {
        Log.d("Ez", "Release mode. Crashlytics enable");
        //Fabric.with(this, new Crashlytics());
    } else {
        Log.d("Ez", "Debug mode. Crashlytics disable");
    }

    throw new RuntimeException("This is a crash");
    }
}

【问题讨论】:

  • 发布你的 build.gradle 和你的 Crashitycs 初始化。
  • 你可以在我之前的帖子中找到我的 build.gradle 和我的 crashlititycs 初始化
  • 您是否尝试过在生命周期的不同时间抛出运行时异常?例如 onResume 在你的第一个活动中
  • 是的,我在第一个 Activity 中尝试过 OnCreate、OnResume、OnPause。

标签: android crashlytics twitter-fabric


【解决方案1】:

这个问题在 2019 年仍然让我抓狂,但我想我终于弄明白了,异常是什么原因造成的。

我按照official firebase documentation 中给出的所有设置说明进行操作,但是当我测试我的解决方案时,由于 TimeoutException,我没有收到有关 Firebase Crashlytics 管理员的任何报告。

就我而言,原因是我在主要活动的 onCreate() 或 onResume() 方法中触发了异常。 当我让我的应用程序在第一次启动时无异常运行时,后来我开始没有任何错误地获取报告,所以我认为这很重要,在第一次启动时应用程序不应该在钩子方法

希望我的经验有所帮助。

【讨论】:

    【解决方案2】:

    我修复了TimeoutException,将以下内容添加到我的build.gradle

    ext.enableCrashlytics = true
    

    或者如果您已经有多个扩展:

    ext {
        ...
        enableCrashlytics = true
    }
    

    你可以把它放在你的应用程序的build.gradle

    【讨论】:

    • 我应该在哪里添加它们?
    • 哪个 build.gradle?
    • 将它放入应用程序的 build.gradle 为我修复了它
    • 这并没有解决 Coinverse 应用程序中的问题。这是open-source code 和相关的StackOverflow post
    • 对于 KTS build.gradle - ext.set("enableCrashlytics", true)
    【解决方案3】:

    我也遇到了这个问题。我只是通过Android Studio -> File -> Invalidate Caches / Restart -> Invalidate and restart解决了它

    【讨论】:

      【解决方案4】:

      好的。在你的 build.gradle 的应用插件部分之后,放置 ext 解决方案

      apply plugin: 'io.fabric'
      apply plugin: 'com.google.gms.google-services'
      
      ext {
          enableCrashlytics = true
      }
      
      android { }
      

      !然后执行无效缓存并重新启动。 还要确保你有implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'

      【讨论】:

      • 这似乎是这篇文章中的重复答案,因为该解决方案已涵盖here
      【解决方案5】:

      接下来是我的解决方案:

      1. 删除所有旧的 Fabric 相关代码
      2. 将应用完全迁移到 Firebase。我为此使用link
      3. 我的观察显示 Crashlytic 会在下次启动应用时发送报告,如果应用每次在 Application::onCreate 方法中崩溃,您可能不会在 Firebase 控制台中看到任何报告。

      我如何测试:

      1. Application::onCreate 方法中抛出测试异常
      2. 评论了再次投掷和启动应用程序
      3. 大约一分钟后,我在 Firebase 控制台中看到了崩溃。

      希望对你也有帮助!

      【讨论】:

        【解决方案6】:

        对于仍在为此苦苦挣扎的人,我通过直接通过 Settings->Plugins android studio 安装 android studio fabric 插件解决了这个问题,并让插件在 gradle 中编辑我的代码。 你可以在这里看到它:https://www.youtube.com/watch?v=Qvqr6vGzxIs

        【讨论】:

          【解决方案7】:

          同样的事情,你按照谷歌文档,它只是不起作用。 5 年前,Crashlytics 曾经非常可靠。看到这个很难过。

          【讨论】:

            【解决方案8】:

            就我而言,我在 AndroidManifest.xml 中有一些不再有效的条目。 Java 运行时找不到它们,导致崩溃。

            更准确地说,我使用了一个 Facebook 插件,我删除了该插件,但在 AndroiManifest.xml 中留下了一些配置条目。删除它们后,此错误消失了。

            在您的情况下,它可能是 AndroidManifest 中的其他内容。

            这是可能的原因之一。每个应用程序都不同。

            【讨论】:

              【解决方案9】:

              检查您的 AndroidManifest.xml 文件,它包含重复的容器 或者写两次以上就是了。

              因为,当我不小心将同一个容器写了两次时,我遇到了这个问题。

              【讨论】:

                【解决方案10】:

                根据 Crashlytics 支持指南:

                确保我们的 SDK 产品线在所有其他 3rd-party SDK 之后

                因此,在所有其他与 sdk 相关的初始化(如果有)之后尝试设置 Fabric.with(this, new Crashlytics());。 如果那里没有其他 sdk 初始化,请尝试在 BuildConfig 初始化后设置它。

                public class MyApplication extends MultiDexApplication {
                
                @Override
                public void onCreate() {
                   super.onCreate();  
                
                    if (!BuildConfig.DEBUG) {
                        Log.d("Ez", "Release mode. Crashlytics enable");
                       //Fabric.with(this, new Crashlytics());
                    } else {
                        Log.d("Ez", "Debug mode. Crashlytics disable");
                    }
                   Fabric.with(this, new Crashlytics());
                
                   throw new RuntimeException("This is a crash");
                  }
                }
                

                【讨论】:

                  【解决方案11】:

                  也许您有另一个导致此错误的库。尝试删除它,

                  比如你可以试试

                  maven { url "https://jitpack.io" }
                  

                  【讨论】:

                    【解决方案12】:

                    导致应用程序可能在 Fabric 连接到其服务之前崩溃。 解决方案:只需删除您的 throw Exception 代码并执行全新安装。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2018-03-02
                      • 1970-01-01
                      • 2019-09-25
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多