官方文档没有说明这一点。
更新:
使用 Google Play Services / Firebase 11+,您现在可以在运行时禁用崩溃报告了。 FirebaseCrash.setCrashCollectionEnabled()
(感谢@Tyler Carberry)。
旧版本答案:
就目前社区所能了解到的情况,官方还没有提供此功能的支持。我建议的最佳方法是在仪表板中为每种构建类型设置多个Firebase应用,并设置多个google_services.json文件,根据构建变量不同将其指向不同的应用程序。
使用 Google Play Services 11.0,您现在可以在运行时禁用崩溃报告。
FirebaseCrash.setCrashCollectionEnabled(!BuildConfig.DEBUG);
最近已经正式引入了禁用 Firebase 崩溃报告的可能性。您需要将 Firebase Android SDK 升级至至少 11.0.0 版本。
为此,您需要编辑您的 AndroidManifest.xml
并添加:
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
在<application>
块中。
您可以使用FirebaseCrash.isCrashCollectionEnabled()在运行时检查Firebase崩溃报告是否已启用。
以下是一个完整的示例,用于在调试版本中禁用Firebase崩溃报告。
build.gradle:
...
buildTypes {
release {
...
resValue("bool", "FIREBASE_CRASH_ENABLED", "true")
}
debug {
...
resValue("bool", "FIREBASE_CRASH_ENABLED", "false")
}
}
...
dependencies {
...
compile "com.google.firebase:firebase-core:11.0.0"
compile "com.google.firebase:firebase-crash:11.0.0"
...
}
AndroidManifest.xml:
<application>
<meta-data
android:name="firebase_crash_collection_enabled"
android:value="@bool/FIREBASE_CRASH_ENABLED"/>
...
firebase_crash_collection_enabled
标志在 Firebase 9.2.1 版本中是否有效? - rraallvv在我的 Application 类中,onCreate() 方法。
if (BuildConfig.DEBUG) {
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread paramThread, Throwable paramThrowable) {
Log.wtf("Alert", paramThrowable.getMessage(), paramThrowable);
System.exit(2); //Prevents the service/app from freezing
}
});
}
这样做是因为它使用包含 Firebase 处理程序的旧处理程序(oldHandler)
final UncaughtExceptionHandler oldHandler = Thread.getDefaultUncaughtExceptionHandler();
处理路径之外
你可以将Firebase的崩溃依赖项更改为仅发布的依赖项。
要完成此操作,您需要将其定义为releaseCompile依赖项。
releaseCompile 'com.google.firebase:firebase-crash:9.4.0'
现在它只会包含在发布构建中。如果您有其他自定义构建类型需要崩溃报告,请将其添加到其中。
customBuildTypeCompile 'com.google.firebase:firebase-crash:9.4.0'
我使用的简单易行的技巧是,在build.gradle
文件中只在发布版本中添加 Firebase 崩溃报告依赖项。
这将从调试构建类型中移除崩溃报告库,并仅在发布版本中添加该库。
dependencies {
releaseCompile 'com.google.firebase:firebase-crash:10.2.0'
}
受这个相关答案和其他答案的启发,我想出了这个方便的解决方案。
使用Timber进行日志记录,我为调试和发布构建创建了不同的Tree子类实现。在调试中,它将延迟到DebugTree,后者写入日志。在发布中,它将异常和高优先级日志转发到Firebase,并删除其余部分。
build.gradle
dependencies {
...
compile 'com.jakewharton.timber:timber:4.3.0'
releaseCompile 'com.google.firebase:firebase-crash:9.0.2'
}
src/debug/java/[package]/ForestFire.java
import timber.log.Timber;
public class ForestFire extends Timber.DebugTree {}
src/release/java/[package]/ForestFire.java
import android.util.Log;
import com.google.firebase.crash.FirebaseCrash;
import timber.log.Timber;
public class ForestFire extends Timber.Tree {
@Override
protected void log(int priority, String tag, String message, Throwable t) {
if (Log.WARN <= priority) {
FirebaseCrash.log(message);
if (t != null) {
FirebaseCrash.report(t);
}
}
}
}
应用程序启动
Timber.plant(new ForestFire());
首先在gradle文件中初始化变量,并检查它是在调试模式还是发布模式下。最好的提交崩溃报告的方法是在Application类中完成。
Build.gradle
buildTypes {
release {
buildConfigField "Boolean", "REPORT_CRASH", '"true"'
debuggable false
}
debug {
buildConfigField "Boolean", "REPORT_CRASH", '"false"'
debuggable true
}
}
现在首先检查模式并在崩溃时提交崩溃报告。
Application.java
/** Report FirebaseCrash Exception if application crashed*/
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException (Thread thread, Throwable e)
{
/** Check whether it is development or release mode*/
if(BuildConfig.REPORT_CRASH)
{
FirebaseCrash.report( e);
}
}
});
目前您无法禁用Firebase崩溃报告,尽管您可以停用Firebase分析。
因此,一种方法是在同一个Firebase项目中创建具有不同ID的另一个应用程序。之后,您只需要更改appID即可启用或禁用Firebase崩溃报告。我为方便起见创建了以下两个应用程序:
AppID:com.android - 适用于发布版本类型
AppID:com.android.debug - 适用于调试版本类型
请按照以下链接获取更多详细信息:
https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html
编辑: 您不需要一次又一次地更改Android项目中的appID。有一个更好的方法可以为调试构建类型使用不同的appID-
android {
defaultConfig {
applicationId "com.android"
...
}
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
}
查看链接以获取更多详细信息:
https://developer.android.com/studio/build/application-id.html
编辑2:
基本上,在上面的解决方案中,您正在Firebase项目中创建两个不同的应用程序,这样您就可以分离开发和生产错误。
FYI Firebase崩溃报告已被弃用。 您应该使用Fabrics Crashlytics(由Google拥有)。 它具有一些非常酷的功能。
对于FirebaseAnalytics
类。
禁用收集:
setAnalyticsCollectionEnabled(false);
启用收集:
setAnalyticsCollectionEnabled(true);
或者在应用程序标签中写入AndroidManifest.xml
:
<meta-data android:name="firebase_analytics_collection_enabled" android:value="false" />
可能的用途:
if (BuildConfig.DEBUG){ //disable for debug
mFirebaseAnalytics.setAnalyticsCollectionEnabled(false);
}
if (!development) { FirebaseCrash.report(e);}
- James ParsonsreleaseCompile 'com.google.firebase:firebase-crash:9.8.0'
这个不行吗?它只会在你的发布版本中添加依赖项,因此在开发过程中,该库不会被添加到项目中,对吧? - Ankit Mundada