无法为 DEBUG 构建禁用 Fabric 的 Crashlytics with Firebase
Fabric's Crashlytics with Firebase can't be disabled for DEBUG builds
我有一个通过 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"
不幸的是,系统仍会报告崩溃。任何想法,我做错了什么?
您需要禁用 Crashlytics
个应用 build.gradle。 Disable Crashlytics for Debug Builds
android {
buildTypes {
debug {
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
...
Firebase Crashlytics documentation 说明一旦在应用程序会话中启用报告,就无法禁用。
默认情况下,Crashlytics 报告在名为 CrashlyticsInitProvider 的 ContentProvider
中启用,它在您的 Application
实例创建之前执行。 CrashlyticsInitProvider 根据 meta-data 值 firebase_crashlytics_collection_enabled
启用或禁用报告,默认情况下为 true。
如果您想禁用报告,清单 meta-data 必须存在并设置为 false:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
在应用程序初始化期间查看 logcat 消息:
CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful
如果消息存在,firebase_crashlytics_collection_enabled
为真。如果消息不存在,则您已成功设置 meta-data 以禁用崩溃报告。
如果 meta-data 缺失或设置为 true,则无法通过调用 Fabric.with(...)
.
在代码中禁用报告
在对另一个答案的评论中,您表示您尝试使用 meta-data 禁用报告但没有成功。检查拼写错误并确保声明正确放置在 <application>
元素中。在我的测试中,我能够使用 meta-data 禁用报告,然后在 运行 时启用。
我终于找到问题所在了。 Crashlytics 是从内容提供者初始化的,所以当您尝试从应用程序的 onCreate()
中禁用时已经太晚了。通过反编译代码,我发现您可以通过将元数据添加到清单中的 元素来禁用该初始化。
所以,我所做的是...我已将其添加到 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>
我还在应用程序模块 gradle 构建文件中禁用了 Crashlytics,方法是添加:
debug {
ext.enableCrashlytics = false
}
令我惊讶的是,我不需要做 Fabric.with(...)
事情。以上就够了。
工作正常:没有报告。
正确答案已由 and already however it seems kinda tedious to change the meta-data value every time you are building an actual release APK thus here's a solution that uses so called manifestPlaceholder 发布,并根据 buildType
.
自动将值更改为 true
或 false
将以下内容添加到您的应用中 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
选项卡来验证当前值。你应该看到这样的东西:
从 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());
如果您想完全禁用 Firebase 崩溃报告并且不必添加
com.crashlytics.sdk.android:crashlytics:2.9.1
依赖项,然后按照 的回答,同时将其添加到您的 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>
我认为如果您切换到 firebase crashlytics 并删除 fabric crashlytics,也可以通过代码来完成:
link to firebase doc
所以在您的应用程序的 onCreate 中 class :
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);
我有一个通过 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"
不幸的是,系统仍会报告崩溃。任何想法,我做错了什么?
您需要禁用 Crashlytics
个应用 build.gradle。 Disable Crashlytics for Debug Builds
android {
buildTypes {
debug {
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
...
Firebase Crashlytics documentation 说明一旦在应用程序会话中启用报告,就无法禁用。
默认情况下,Crashlytics 报告在名为 CrashlyticsInitProvider 的 ContentProvider
中启用,它在您的 Application
实例创建之前执行。 CrashlyticsInitProvider 根据 meta-data 值 firebase_crashlytics_collection_enabled
启用或禁用报告,默认情况下为 true。
如果您想禁用报告,清单 meta-data 必须存在并设置为 false:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
在应用程序初始化期间查看 logcat 消息:
CrashlyticsInitProvider: CrashlyticsInitProvider initialization successful
如果消息存在,firebase_crashlytics_collection_enabled
为真。如果消息不存在,则您已成功设置 meta-data 以禁用崩溃报告。
如果 meta-data 缺失或设置为 true,则无法通过调用 Fabric.with(...)
.
在对另一个答案的评论中,您表示您尝试使用 meta-data 禁用报告但没有成功。检查拼写错误并确保声明正确放置在 <application>
元素中。在我的测试中,我能够使用 meta-data 禁用报告,然后在 运行 时启用。
我终于找到问题所在了。 Crashlytics 是从内容提供者初始化的,所以当您尝试从应用程序的 onCreate()
中禁用时已经太晚了。通过反编译代码,我发现您可以通过将元数据添加到清单中的
所以,我所做的是...我已将其添加到 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>
我还在应用程序模块 gradle 构建文件中禁用了 Crashlytics,方法是添加:
debug {
ext.enableCrashlytics = false
}
令我惊讶的是,我不需要做 Fabric.with(...)
事情。以上就够了。
工作正常:没有报告。
正确答案已由 buildType
.
true
或 false
将以下内容添加到您的应用中 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
选项卡来验证当前值。你应该看到这样的东西:
从 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());
如果您想完全禁用 Firebase 崩溃报告并且不必添加
com.crashlytics.sdk.android:crashlytics:2.9.1
依赖项,然后按照
<application ...>
// ...
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${enableCrashReporting}" />
<meta-data
android:name="firebase_analytics_collection_deactivated"
android:value="true"/>
</application>
我认为如果您切换到 firebase crashlytics 并删除 fabric crashlytics,也可以通过代码来完成: link to firebase doc
所以在您的应用程序的 onCreate 中 class :
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);