Android(Kotlin)集成Firebase Crashlytics:如何忽略未知applicationId?
这个场景我太熟了,之前帮同事处理过一模一样的情况,给你几个精准的解决方案,完全符合你“不想给Debug开Crashlytics、也不想在Firebase加Debug应用”的需求:
方案一:直接在Debug构建类型中禁用Google Services插件+关闭Crashlytics收集
这是最简洁直接的方法,一步到位:
在app级别的build.gradle.kts(如果用Groovy就是build.gradle)里,给Debug构建类型添加两个配置:
android { buildTypes { release { minifyEnabled false // 保持Release的正常配置 manifestPlaceholders["crashlyticsCollectionEnabled"] = "true" } debug { applicationIdSuffix ".debug" debuggable true // 禁用Google Services插件对Debug构建的配置处理 googleServices { disable() } // 强制关闭Crashlytics的崩溃收集 manifestPlaceholders["crashlyticsCollectionEnabled"] = "false" } } }如果你在代码里手动初始化了Crashlytics,记得加个Debug判断,避免Debug模式下初始化:
// 比如在Application类的onCreate方法里 if (!BuildConfig.DEBUG) { FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true) }
这样Debug构建时,Google Services插件不会去校验包名,Crashlytics也完全不工作,完美避开报错。
方案二:让google-services.json只对Release构建生效
把google-services.json从app根目录移到src/release/google-services.json(没有这个目录就手动创建),这样Debug构建时找不到这个配置文件,Google Services插件就不会执行包名校验逻辑。
同时配合方案一里的crashlyticsCollectionEnabled配置,确保Debug模式下Crashlytics不启动。这个方法适合不想修改插件启用状态的同学。
方案三:手动修改google-services.json(不推荐,但可用)
如果你不想动gradle配置,可以打开google-services.json,在client数组里手动添加一个Debug包名的客户端条目:
{ "client": [ // 原来的Release客户端条目 { "client_info": { "mobilesdk_app_id": "xxx", "android_client_info": { "package_name": "com.something.app" } }, // 其他字段... }, // 新增Debug客户端条目 { "client_info": { "mobilesdk_app_id": "xxx", // 可以复用Release的ID "android_client_info": { "package_name": "com.something.app.debug" } }, // 其他字段复制Release的即可 } ] }
然后在Debug构建里关闭Crashlytics收集,这样虽然包名匹配了,但因为Firebase后台没有这个应用,Crashlytics不会上传任何数据,也能解决报错。不过这个方法需要手动维护json文件,不如前两个方案省心。
内容的提问来源于stack exchange,提问作者It's Me

