Android 织物&x27;带Firebase can的Crashlytics';不能为调试版本禁用
我有一个应用程序,通过Firebase利用Fabric的Crashlytics。 下面是在我的应用程序onCreate中执行的第一件事Android 织物&x27;带Firebase can的Crashlytics';不能为调试版本禁用,android,firebase,crashlytics,google-fabric,crashlytics-android,Android,Firebase,Crashlytics,Google Fabric,Crashlytics Android,我有一个应用程序,通过Firebase利用Fabric的Crashlytics。 下面是在我的应用程序onCreate中执行的第一件事 CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder() .disabled(BuildConfig.DEBUG) .build(); Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build
CrashlyticsCore crashlyticsCore = new CrashlyticsCore.Builder()
.disabled(BuildConfig.DEBUG)
.build();
Fabric.with(this, new Crashlytics.Builder().core(crashlyticsCore).build());
尽管如此,崩溃是在DEBUG==true
模式下提交的
我使用以下版本
以我的身材,格雷德尔
classpath“io.fabric.tools:gradle:1.25.1”
在我的应用程序/build.gradle中
implementation“com.crashlytics.sdk.android:crashlytics:2.9.1”
不幸的是,撞车事件仍有报道。任何想法,我做错了什么?你需要禁用应用程序build.gradle的
Crashlytics
说明了一旦在应用程序会话中启用了报告,就不能将其禁用
默认情况下,在创建应用程序
实例之前执行的名为CrashlyticsInitProvider的ContentProvider
中启用Crashlytics报告。CrashlyticsInitProvider根据元数据值启用或禁用报告firebase\u crashlytics\u collection\u enabled
,默认情况下为true
如果要禁用报告,则必须显示清单元数据并将其设置为false:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
如果消息存在,firebase\u crashlytics\u collection\u enabled
为真。如果消息不存在,则表示您已成功将元数据设置为禁用崩溃报告
如果元数据丢失或设置为true,则无法使用调用Fabric.with(…)
禁用代码中的报告
在对另一个答案的评论中,您指出您尝试使用元数据禁用报告,但未成功。检查拼写错误并确保声明正确放置在
元素中。在我的测试中,我能够使用元数据禁用报告,然后在运行时启用 我终于找到了问题所在。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>
令我惊讶的是,我不需要用(…)做结构。以上就够了
它工作正常:没有报告。正确的答案已经发布,但是每次构建实际的发布APK时更改元数据值似乎有点乏味,因此这里有一个解决方案,它使用所谓的,并根据不同的属性自动将值更改为真
或假
buildType
将以下内容添加到您的应用程序build.gradle
android {
// ...
buildTypes {
debug {
manifestPlaceholders = [enableCrashReporting:"false"]
}
release {
manifestPlaceholders = [enableCrashReporting:"true"]
}
}
}
<manifest ... >
<application ...>
// ...
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="${enableCrashReporting}" />
</application>
</manifest>
并将其添加到您的AndroidManifest.xml
android {
// ...
buildTypes {
debug {
manifestPlaceholders = [enableCrashReporting:"false"]
}
release {
manifestPlaceholders = [enableCrashReporting:"true"]
}
}
}
<manifest ... >
<application ...>
// ...
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="${enableCrashReporting}" />
</application>
</manifest>
从android文档中获取此信息
启用选择性加入报告:
默认情况下,Firebase Crashlytics会自动收集所有应用程序用户的崩溃报告。为了让用户更好地控制他们发送的数据,您可以启用选择性加入报告
要做到这一点,您必须禁用自动收集,并仅为opt-in用户初始化Crashlytics
使用AndroidManifest.xml文件中的元数据标记关闭自动收集:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
如果您想完全禁用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,我认为也可以从代码中执行此操作:
因此,在应用程序类的onCreate中:
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);
谢谢,但我没有使用firebase crash,因为它现在已被弃用。你提出的答案就是这样的。我正在使用crashlytics,它只是与firebase控制台连接。再次感谢,但出于几个原因,我需要在运行时执行此操作。知道为什么.disabled
不起作用吗?它在我没有连接Firebase的其他应用程序中工作得很好。这似乎是一个firebase Bug,不是吗?您需要在gradle中执行ext.enableCrashlytics=false
,并禁用crashlyticcore-crashlyticcore=new-crashlyticcore.Builder();Fabric.with(这是新的Crashlytics.Builder().core(crashlyticcore.build())代码>在应用程序类中很遗憾,没有。它仍然部署在调试模式下产生的崩溃。我还尝试使用firebase\u crashlytics\u集合在清单中禁用它_enabled@peshkira你最终找到了适合你的解决方案吗?@Shobhit Puri是的。看一看被接受的答案谢谢,我会再试一次。是几个问题共同导致了这个问题。你的回答帮助我解决了这些问题,所以我接受了。非常感谢。我自己也有同样的问题,这个解决方案似乎还不够。我已经添加了元数据,在日志中没有“CrashlyticsInitProvider初始化成功”,我已经四次检查了Fabric.with(这是新的Crashlytics())
只在非调试版本上调用,我有SDK的2.9.3版,我仍然收到崩溃报告。请帮助-如果没有其他事情要做,我将尝试下面提到的基于gradle的解决方案。不幸的是,我尝试了这个,似乎不再有效<代码>CrashlyticsInitProvider:CrashlyticsInitProvider初始化成功
不再显示在调试版本的日志中,但崩溃仍会发送到我的控制台firebase\u core\u version='16.0.5'
和firebase\u crashlytics\u version='2.9.6'
从最新的crashlytics打印出来I/crashlyticcore:initialized crashlytics 2.6.6.29
谢谢,我会再试一次。ext.enablecashlytics=false这行正在用下面的消息使我的应用程序崩溃
<application ...>
// ...
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="${enableCrashReporting}" />
<meta-data
android:name="firebase_analytics_collection_deactivated"
android:value="true"/>
</application>
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(!BuildConfig.DEBUG);