如何禁用Crashlytics Answers?

时间:2015-08-12 11:34:22

标签: android crashlytics twitter-fabric

禁用Crashlytics错误报告相对straight forward.。我也想禁用Answers for debug builds。但是,

new Crashlytics.Builder().answers(null);

不起作用,因为显然答案不能为空并且

new Crashlytics.Builder().answers(new CustomAnswers());

使用CustomAnswers作为我的类扩展Answers在调用Answers.getInstance()时获取NPE。但与简单地调用一些enable()方法相比,这种方法很难开始。

有什么想法吗?

另一方面,我真的希望Fabric能够尽快更新和改进他们的文档。

3 个答案:

答案 0 :(得分:4)

在我的应用上,我们采用老式的方式:

if (!IS_DEBUG) {
   Fabric.with(this, new Crashlytics());
}

工作正常。

当然,您可以使用您需要的任何自定义参数进行初始化。

修改

获取调试布尔值只需要使用gradle来帮助你:

src/
   main/ // your app code
   debug/
       AppSettings.Java:
            public static final boolean IS_DEBUG = true;
   release/
       AppSettings.Java:
            public static final boolean IS_DEBUG = false;

修改

我建议不要使用BuildConfig.DEBUG,请参阅此文章:http://www.digipom.com/be-careful-with-buildconfig-debug/

答案 1 :(得分:3)

目前,我用旧的Java方式解决了这个问题:

使用排序单例扩展Answers

public class CustomAnswers extends Answers {

    private static CustomAnswers instance;

    private boolean mEnabled;

    private CustomAnswers(boolean enabled) {
        super();
        mEnabled = enabled;
    }

    public static synchronized void init(boolean enabled) {
        if (instance == null) {
            instance = new CustomAnswers(enabled);
        }
    }

    public static synchronized CustomAnswers get() {
        return instance;
    }

    @Override
    public void logSignUp(SignUpEvent event) {
        if (mEnabled) {
            super.logSignUp(event);
        }
    }

    // (...)
}

使用Answers实现初始化Crashlytics:

boolean isDebug = DebugHelper.isDebugVersion(this);
CustomAnswers.init(!isDebug);
CrashlyticsCore crashlyticsCore =
        new CrashlyticsCore.Builder().disabled(isDebug).build();
Fabric.with(this, new Crashlytics.Builder()
        .core(crashlyticsCore).answers(CustomAnswers.get()).build());

对事件使用Answers实现:

CustomAnswers.get().logInvite(new InviteEvent());

这将禁用正在记录的事件。

请注意,正如我在第一篇文章中所述,Answers.getInstance()将返回null,而不是CustomAnswers实例。

答案 2 :(得分:-1)

试试此代码

 CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, new Crashlytics.Builder().core(core).build());

Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());