Crashlytics Fabric:无法执行任务

Posted

技术标签:

【中文标题】Crashlytics Fabric:无法执行任务【英文标题】:Crashlytics Fabric : Failed to execute task 【发布时间】: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 ComponentInfoconnectivit.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。 【参考方案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 和相关的*** 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】:

接下来是我的解决方案:

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

我如何测试:

    Application::onCreate 方法中抛出测试异常 评论了再次投掷和启动应用程序 大约一分钟后,我在 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 代码并执行全新安装。

【讨论】:

以上是关于Crashlytics Fabric:无法执行任务的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Crashlytics 升级到 Fabric

Crashlytics 更新到 Fabric:无法复制 dSYM

从 Crashlytics 升级到 Fabric 后无法构建我的应用

Crashlytics iOS Beta 卡在 Fabric 应用程序中

Firebase Crashlytics 在没有 Fabric API 密钥的情况下无法工作

无法在 Crashlytics/fabric 中获取崩溃报告。显示错误:“看起来我们缺少 dSYM 来处理以下版本的崩溃。”