对于DEBUG构建,无法禁用Fabric的Crashlytics with Firebase

pes*_*ira 29 android firebase crashlytics crashlytics-android google-fabric

我有一个应用程序,通过Firebase使用Fabric的Crashlytics.以下是我的Applications onCreate中执行的第一件事

CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
    .disabled(BuildConfig.DEBUG)
    .build();
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());
Run Code Online (Sandbox Code Playgroud)

尽管如此,崩溃仍以DEBUG == true模式提交.

我使用以下版本

在我的build.gradle中 classpath "io.fabric.tools:gradle:1.25.1"

在我的app/build.gradle中 implementation "com.crashlytics.sdk.android:crashlytics:2.9.1"

不幸的是,崩溃仍然有报道.任何想法,我做错了什么?

reV*_*rse 89

Bob Snyderniqueco已经发布了正确的答案,但是每次构建实际版本APK时更改元数据值似乎有点乏味,因此这是一个使用所谓的manifestPlaceholder并自动将值更改为truefalse依赖于这个buildType.

将以下内容添加到您的应用中 build.gradle

android {

    // ...

    buildTypes {
        debug {
            manifestPlaceholders = [enableCrashReporting:"false"]
        }
        release {
            manifestPlaceholders = [enableCrashReporting:"true"]
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这对你来说 AndroidManifest.xml

<manifest ... >

    <application ...>

        // ...

        <meta-data android:name="firebase_crashlytics_collection_enabled" android:value="${enableCrashReporting}" />

    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

Merged Manifest打开AndroidManifest.xml后,可以通过单击选项卡来验证当前值.你应该看到这样的东西:

合并明确的崩溃报告元数据值

  • 这应该是新接受的答案。 (3认同)

Bob*_*der 27

火力地堡Crashlytics文件解释说,一旦报告是在应用程序会话中启用,它不能被禁用.

默认情况下,在创建实例之前执行的ContentProvider命名CrashlyticsInitProvider中启用Crashlytics报告Application. CrashlyticsInitProvider根据元数据值启用或禁用报告firebase_crashlytics_collection_enabled,默认情况下该值为true.

如果要禁用报告,则清单元数据必须存在并设置为false至关重要:

<meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" />
Run Code Online (Sandbox Code Playgroud)

在应用程序初始化期间查看logcat中的消息:

CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful
Run Code Online (Sandbox Code Playgroud)

如果消息存在,firebase_crashlytics_collection_enabled则为true.如果消息不存在,则表示您已成功设置元数据以禁用崩溃报告.

如果元数据丢失或设置为true,则无法使用调用来禁用代码中的报告Fabric.with(...).

在对另一个答案的评论中,您表明您尝试使用元数据禁用报告但未成功.检查拼写错误并确保声明正确放置在<application>元素中.在我的测试中,我能够使用元数据禁用报告,然后在运行时启用.

  • 我自己也有同样的问题,这个解决方案似乎还不够.我添加了元数据,我没有在日志中"CrashlyticsInitProvider初始化成功",我有四重检查`Fabric.with(这个,新的Crashlytics());`只在非调试版本上调用,我有SDK的2.9.3版本,我仍然收到崩溃报告.请帮助 - 如果没有其他事可做,我将尝试下面提到的基于gradle的解决方案. (3认同)

niq*_*eco 9

我终于找到了这个问题.Crashlytics是从内容提供商初始化的,所以当你尝试从应用程序中禁用onCreate()它时,为时已晚.通过反编译的代码,我已经看到您可以通过向清单中的<application>元素添加元数据来禁用该初始化.

所以,我所做的就是这个......我已将其添加到app/src/debug/AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?><!--suppress ALL -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="<your app package>">

   <application>
           <meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
   </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

我还通过添加以下内容在app module gradle构建文件中禁用了Crashlytics:

    debug {
        ext.enableCrashlytics = false
    }
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,我不需要做那Fabric.with(...)件事.以上就足够了.

它工作正常:没有报告.

  • @AjithMemana 这适用于旧的 Fabric Crashlytics。不是 Fabric 的 Crashlytics 与 Firebase,问题在于它。为此,请查看已接受的答案 (2认同)

Que*_* G. 5

我认为如果您切换到 firebase crashlytics 并删除了 fabric crashlytics,也可以从代码中做到这一点:链接到firebase doc

所以在你的应用程序类的 onCreate 中:

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

12758 次

最近记录:

6 年,7 月 前