升级google-services至4.3.12报No matching client found错误修复
问题根因
com.google.gms:google-services 从4.3.12版本开始收紧了包名校验规则:
- 4.3.10及更早版本对库模块、多风味场景的包名匹配有容错逻辑,不会强制校验所有构建变体的包名是否和
google-services.json中的client条目匹配 - 4.3.12版本会逐构建变体读取最终applicationId做精确匹配,只要存在任意一个变体的包名未在配置文件中注册,或者库模块错误应用了插件(会拿库的namespace当包名做匹配),就会抛出
No matching client found for package name编译错误。
修复方案
按优先级从高到低尝试以下操作:
- 移除库模块的插件引用
检查所有纯库模块的build.gradle文件,如果存在apply plugin: 'com.google.gms.google-services'配置直接删除。google-services插件的作用是在最终打包的应用模块注入服务配置,纯库模块只需要依赖对应Google/Firebase SDK即可,不需要、也不应该应用这个插件,这是库项目升级后触发该错误的最常见原因。 - 补全配置文件的client条目
整理所有productFlavor对应的applicationId,到Google服务后台逐个添加对应包名的Android客户端,下载更新后的完整google-services.json,放到最终打包的application模块根目录即可,不要给库模块单独放置配置文件。 - 按风味拆分配置文件
如果不同flavor对接的是完全独立的Google服务项目,可以给每个风味单独指定对应的配置文件路径,避免全局匹配失败,配置示例:android { productFlavors { dev { applicationId "com.your.pkg.dev" } prod { applicationId "com.your.pkg.prod" } } } // 配合构建变体切换配置路径 android.applicationVariants.all { variant -> def flavorName = variant.productFlavors[0].name googleServices.setGoogleServicesJsonLocation( file("src/${flavorName}/google-services.json") ) } - 临时关闭严格校验
如果暂时不需要给所有风味接入Google服务,可以在application模块的build.gradle中添加配置跳过强制校验,快速恢复编译:googleServices { strictVersionCheck false allowMissingGoogleServicesJson true }
内容的提问来源于stack exchange,提问作者M. Usman Khan
相关产品推荐
相关产品推荐

