如何在禁用Firebase Crashlytics收集时阻止版本号上传?
我完全懂你的困扰——明明已经把崩溃收集关了,结果Crashlytics还是不断收到开发/QA版本的信息,把筛选列表塞得满满当当,连正式版本都快找不到了。之前我也遇到过类似的情况,试了几个方法,这里分享最有效的几个:
1. 彻底禁用Crashlytics的自动初始化(最推荐)
你之前的配置只是关闭了崩溃日志的收集,但Crashlytics在应用启动时的自动初始化步骤还是会上报基础的应用信息(包括版本号、包名)。要完全阻止这个行为,需要在build.gradle的对应变体里禁用Crashlytics的自动初始化:
android { buildTypes { release { // 正式版本保持正常配置 buildConfigField "boolean", "crashlytics_enabled", "true" crashlytics { mappingFileUploadEnabled true } } qa { initWith release buildConfigField "boolean", "crashlytics_enabled", "false" crashlytics { mappingFileUploadEnabled false // 核心:禁用Crashlytics自动初始化 enableCrashlytics false } } debug { buildConfigField "boolean", "crashlytics_enabled", "false" crashlytics { mappingFileUploadEnabled false enableCrashlytics false } } } }
同时,在Application的onCreate里,只在正式版本下初始化Crashlytics:
@Override public void onCreate() { super.onCreate(); if (BuildConfig.crashlytics_enabled) { // 仅正式版本初始化Crashlytics FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true); } // 其他初始化代码... }
这样一来,开发/QA版本完全不会触发Crashlytics的初始化流程,自然也就不会上报任何信息到服务器。
2. 排除Crashlytics依赖(极端情况)
如果你的开发/QA版本完全不需要Crashlytics的任何功能,可以直接在对应变体里排除Crashlytics的依赖:
android { buildTypes { qa { initWith release dependencies { exclude group: 'com.google.firebase', module: 'firebase-crashlytics' } } } }
不过这个方法比较极端,如果你之后需要临时测试Crashlytics功能,还要重新加依赖,所以更推荐第一种方案。
3. 控制台层面过滤(治标不治本)
如果上面的方法暂时没法实施,你可以在Firebase Crashlytics控制台的版本筛选器里,通过版本号前缀来过滤掉开发/QA版本。比如给开发版本加个dev-前缀,然后在筛选器里输入-dev-来排除这些版本。但这只是临时的 workaround,不能从根源上阻止信息上报。
为什么之前的设置没用?
你之前添加的firebase_crash_collection_enabled meta-data和setCrashlyticsCollectionEnabled(false),只是关闭了崩溃日志的收集和上报,但Crashlytics的初始化过程还是会向服务器发送应用的基础元数据(版本号、包名、设备信息等)。只有从初始化层面切断,才能完全阻止这些信息的发送。
内容的提问来源于stack exchange,提问作者cymerio

