如何解决没有找到匹配的客户端的软件包名称的错误

522 阅读1分钟

在安卓开发中,当你有一个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 文件中找到你项目的包名。

没有发现不同口味的匹配客户端

一个安卓应用可以有多个buildTypesproductFlavors

当你添加一个构建类型或风味,在包名中添加一个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 属性与你的构建和口味的实际包名相匹配。