在安卓开发中,当你有一个google-services.json ,其中的package_name 属性与你的安卓项目中发现的不匹配时,会触发错误No matching client found for package name 。
例如,我的安卓项目在AndroidManifest.xml 文件中的包名是org.metapx.kotlinfirebase :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.metapx.kotlinfirebase">
但是在我的google-services.json 文件中,package_name 属性被定义为kotlinfirebas :
{
"client": [
{
"client_info": {
"mobilesdk_app_id": "...",
"android_client_info": {
"package_name": "org.metapx.kotlinfirebas"
}
}
}
]
}
上面的错别字将导致安卓应用程序的构建失败:
Execution failed for task ':app:processDebugGoogleServices'.
> No matching client found for package name 'org.metapx.kotlinfirebase'
要解决这个错误,你需要确保google-services.json 文件的package_name 属性与你的Android项目的实际包名相匹配。
你可以在AndroidManifest.xml 文件中找到你项目的包名。
没有发现不同口味的匹配客户端
一个安卓应用可以有多个buildTypes 或productFlavors 。
当你添加一个构建类型或风味,在包名中添加一个applicationIdSuffix ,你需要确保每个包名有两个不同的google-services.json 文件。
例如,在我的Android项目中,有一个debug 构建类型,定义如下:
buildTypes {
release {
minifyEnabled false
}
debug {
applicationIdSuffix ".dev"
debuggable true
}
}
这意味着你需要有第二个google-services.json 文件,该文件中的package_name 值为org.metapx.kotlinfirebase.dev ,如下图所示:
{
"client": [
{
"client_info": {
"mobilesdk_app_id": "...",
"android_client_info": {
"package_name": "org.metapx.kotlinfirebase.dev"
}
}
}
]
}
另外,请记住,你需要把google-services.json 文件放在构建类型或味道的目录上。
Android会在app 及其子目录中寻找google-services.json 文件,如下图所示:
Androidapp/app/google-services.json
Androidapp/app/src/google-services.json
Androidapp/app/src/debug/google-services.json
Androidapp/app/src/Debug/google-services.json
# Androidapp/app/src/buildType/google-services.json
# Androidapp/app/src/productFlavor/google-services.json
当你添加更多的构建类型或产品口味时,Android扫描寻找google-services.json 文件的目录列表将增加。
总而言之,当你有一个或多个软件包名称在google-services.json 文件中没有匹配的package_name 值时,就会发生错误No matching client found for package name 。
你需要确保你的google-services.json 文件的package_name 属性与你的构建和口味的实际包名相匹配。