代码之家  ›  专栏  ›  技术社区  ›  motis10 towith

Crashlytics与proguard崩溃

  •  2
  • motis10 towith  · 技术社区  · 8 年前

    我做了fabric在文档中要求的所有事情:

    -renamesourcefileattribute SourceFile
    -keepattributes *Annotation*
    -keepattributes SourceFile,LineNumberTable
    -keep public class * extends java.lang.Exception
    -keep class com.crashlytics.** { *; }
    -dontwarn com.crashlytics.**
    

    但仍然出现此错误:

    E/答案:无法提交事件任务 java.util.concurrent。RejectedExecutionException:任务 java.util.concurrent.ScheduledThreadPool执行器$ScheduledFutureTask@d2d2a84 从拒绝 java.util.concurrent.ScheduledThreadPoolExecutor@6b49897[正在关闭 关闭,池大小=1,活动线程=0,排队任务=1,已完成 任务=5] 在 java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPool Executor.java:2014) 在 java.util.concurrent.ThreadPoolExecutor.reject(ThreadPool执行器.java:794) 在 java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPool执行器.java:302) 在 java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPool执行器.java:527) 在 java.util.concurrent.ScheduledThreadPoolExecutor.submit(ScheduledThreadPool执行器.java:626) 在 java.util.concurrent.Executors$DelegatedExecutorService.submit(Executtors.java:594) 在 com.crashlytics.android.answers.AnswersEventsHandler.executeAsync(源文件:182) 在 com.crashlytics.android.answers.AnswersEventsHandler.processEvent(源文件:168) 在 com.crashlytics.android.answers.AnswersEventsHandler.processEventAsync(源文件:44) 在 com.crashlytics.android.answers.SessionAnalyticsManager.onLifecycle(源文件:128) 在 com.crashlytics.android.answers.AnswersLifecycleCallbacks.onActivityStopped(源文件:43) 位于io.fabric.sdk.android.c.onActivityStopped(源文件:126) 在 android.app.Application.dispatchActivityStopped(Application.java:232) 位于android.support.v4.app.FragmentActivity.onStop(源文件:616) 位于android.support.v7.app.AppCompatActivity.onStop(源文件:172) 在 android.app.Instrumentation.callActivityOnStop(Instrumentation.java:1279) 位于android.app.Activity.performStop(Activity.java:6395) 在 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3883) 在android.app.ActivityThread.-wrap5(ActivityThread.java)上 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1417) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:148) 位于android.app.ActivityThread.main(ActivityThread.java:5461) 位于java.lang.reflect.Method。invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygotecInit.java:726) 位于com.android.internal.os.ZygoteInit.main(Zygote初始化.java:616)

    此外:

    dependencies {
        // The Fabric Gradle plugin uses an open ended version to react
        // quickly to Android tooling updates
        classpath 'io.fabric.tools:gradle:1.21.7'
    }
    compile('com.crashlytics.sdk.android:crashlytics:2.6.2@aar') {
        transitive = true;
    }
    compile('com.crashlytics.sdk.android:answers:1.3.8@aar') {
        transitive = true;
    }
    apply plugin: 'io.fabric'
    
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            shrinkResources true
            proguardFiles 'proguard-rules.pro'
        }
    

    我的活动:

    public class BaseActivity extends AppCompatActivity{
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this));
            Fabric.with(this, new Answers(), new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());
        }
    }
    

    在Twitter论坛上也打开了问题:
    https://twittercommunity.com/t/e-answers-failed-to-submit-events-task/72921/3

    1 回复  |  直到 8 年前
        1
  •  1
  •   motis10 towith    8 年前

    最后我发现了我的问题。我以前没见过,但是, Thread.UncaughtExceptionHandler

    我用这个代码解决了这个问题:

       @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // Order is important!
            // First, start Crashlytics
            Fabric.with(this, new Answers(), new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());
    
            // Second, set custom UncaughtExceptionHandler
            Thread.UncaughtExceptionHandler mDefaultUEH = Thread.getDefaultUncaughtExceptionHandler();
            ExceptionHandler exceptionHandler = new ExceptionHandler(this, mDefaultUEH);
            Thread.setDefaultUncaughtExceptionHandler(exceptionHandler);
    }