我的应用程序通过Firebase使用Fabric的Crashlytics。 以下是我的Applications onCreate
中执行的第一件事CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
.disabled(BuildConfig.DEBUG)
.build();
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());
尽管如此,崩溃仍以DEBUG == true
模式提交。
我使用以下版本
在我的build.gradle中
classpath "io.fabric.tools:gradle:1.25.1"
在我的app / build.gradle中
implementation "com.crashlytics.sdk.android:crashlytics:2.9.1"
不幸的是,崩溃仍然有报道。任何想法,我做错了什么?
答案 0 :(得分:53)
正确的答案已经由Bob Snyder和niqueco发布,但是每次构建实际的发行版APK时都要更改元数据值似乎有些繁琐,因此,这是一种使用所谓的解决方案manifestPlaceholder,然后根据true
将值自动更改为false
或buildType
。
将以下内容添加到您的应用build.gradle
android {
// ...
buildTypes {
debug {
manifestPlaceholders = [enableCrashReporting:"false"]
}
release {
manifestPlaceholders = [enableCrashReporting:"true"]
}
}
}
这就是您的AndroidManifest.xml
<manifest ... >
<application ...>
// ...
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="${enableCrashReporting}" />
</application>
</manifest>
打开AndroidManifest.xml后,您可以通过单击Merged Manifest
选项卡来验证当前值。您应该会看到类似这样的内容:
答案 1 :(得分:18)
Firebase Crashlytics documentation解释说,一旦在应用会话中启用了报告,就无法将其禁用。
默认情况下,在创建ContentProvider
实例之前执行的名为 CrashlyticsInitProvider 的Application
中启用Crashlytics报告。 CrashlyticsInitProvider 根据元数据值firebase_crashlytics_collection_enabled
启用或禁用报告,默认情况下为true。
如果您希望报告已停用,那么明确的元数据存在并设置为false至关重要:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
在应用程序初始化期间查看logcat中的消息:
CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful
如果消息存在,则firebase_crashlytics_collection_enabled
为真。如果消息不存在,则表示您已成功设置元数据以禁用崩溃报告。
如果元数据丢失或设置为true,则无法通过调用Fabric.with(...)
来禁用代码中的报告。
在对其他答案的评论中,您表明您尝试使用元数据禁用报告但未成功。检查拼写错误并确保声明正确放置在<application>
元素中。在我的测试中,我能够使用元数据禁用报告,然后在运行时启用。
答案 2 :(得分:8)
我终于找到了这个问题。 Crashlytics是从内容提供商初始化的,因此当您尝试从应用程序的onCreate()
禁用时,为时已晚。通过反编译的代码我已经看到你可以通过向&lt; application&gt;添加元数据来禁用该初始化。清单中的元素。
所以,我所做的就是这个...我已将此添加到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>
我还通过添加:
在app模块gradle构建文件中禁用了Crashlytics debug {
ext.enableCrashlytics = false
}
令我惊讶的是,我不需要做Fabric.with(...)
事。以上就够了。
工作正常:没有报道。
答案 3 :(得分:4)
我认为,如果您切换到Firebase crashlytics并删除了fabric crashlytics,也可以从代码中实现: link to firebase doc
因此在您的应用程序类的onCreate中:
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);
答案 4 :(得分:3)
您需要停用app的build.gradle的Crashlytics
。 Disable Crashlytics for Debug Builds
android {
buildTypes {
debug {
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
...
答案 5 :(得分:1)
从android文档获取了此信息 Customize your Firebase Crash Reports
启用选择加入报告: 默认情况下,Firebase Crashlytics自动为您所有应用程序的用户收集崩溃报告。为了使用户能够更好地控制他们发送的数据,您可以改为启用选择加入报告。
要做到这一点,您必须禁用自动收集功能,并仅对选择加入的用户初始化Crashlytics。
在您的AndroidManifest.xml文件中使用元数据标签关闭自动收集:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
通过初始化应用活动之一的Crashlytics,为选定的用户启用收集功能:
Fabric.with(this, new Crashlytics());
答案 6 :(得分:0)
如果您想完全禁用Firebase崩溃报告并且也不必添加
com.crashlytics.sdk.android:crashlytics:2.9.1
依赖性,然后按照@reVerse的回答进行操作,并将其添加到您的AndroidManifest.xml中。
<application ...>
// ...
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${enableCrashReporting}" />
<meta-data
android:name="firebase_analytics_collection_deactivated"
android:value="true"/>
</application>