本文翻译自:No matching client found for package name (Google Analytics) - multiple productFlavors & buildTypes [closed]
Context: 内容:
I'm trying to set up Google Analytics for my app. 我正在尝试为我的应用设置Google Analytics(分析)。 (having 4 custom buildTypes
and more than a few productFlavors
) (具有4个自定义buildTypes
和多个productFlavors
)
It works fine when I select the Build Variant
which has the applicationId
set to com.my.app.package.name
(the package name used when generating the google-services.json
). 当我选择将applicationId
设置为com.my.app.package.name
(生成google-services.json
时使用的包名称)的Build Variant
时,它可以正常工作。 But, my other flavors have different applicationIds. 但是,我的其他口味具有不同的applicationIds。
I followed the offical devguide to set it up. 我按照官方的devguide进行了设置。
Error I get when any another build variant is selected in Build Variants Tab
(which has a different applicationId
(package name) is as follows: 在“ Build Variants Tab
(具有不同的applicationId
(包名称))中选择了任何其他构建变体时,出现以下错误:
Error:Execution failed for task ':app:processAllcategoriesDebugfreeGoogleServices'. 错误:任务':app:processAllcategoriesDebugfreeGoogleServices'的执行失败。
No matching client found for package name 'com.my.app.package.name.debug' 找不到与包名称'com.my.app.package.name.debug'匹配的客户端
Explanation of Error Message: 错误消息说明:
In the task name in the error message above Debugfree
is my custom buildType
and Allcategories
is one of my productFlavors
. 在错误消息上方的任务名称中, Debugfree
是我的自定义buildType
而Allcategories
是我的productFlavors
。
I understand the error and know the package name is different from what i used when generating the json, but that is what I'm trying to figure a way around. 我理解错误,并且知道包名称与生成json时使用的包名称不同,但这就是我试图解决的方法。
Problem: 问题:
Now, the google-services.json
resides in the app
folder and hence I am not being able to separate them out for each product flavor by dropping them in the flavor specific source set folder. 现在, google-services.json
驻留在app
文件夹中,因此我无法通过将它们放在特定于口味的源集文件夹中针对每种产品口味将它们分开。
Questions: 问题:
byildType
for debugging suffixes .debug
to the applicationId
(package name). 我用于调试的自定义byildType
将.debug
附加到applicationId
(程序包名称)。 Is there a way I can make it work with the google-services.json
which has my release applicationId
(ie without the suffix .debug
) 有什么办法可以使它与具有我的发布applicationId
的google-services.json
一起工作(即不带后缀.debug
) google-services.json
file without using separate files and tasks to copy the required file to app
folder. 有没有一种方法可以在同一google-services.json
文件中配置多种产品口味,而无需使用单独的文件和任务将所需文件复制到app
文件夹。 I know it can be done using task
as mentioned in this post . 我知道这是可以做到用task
中提到的这篇文章 。 Is there a simpler way to just have one file or pick right file based on gradle configuration? 是否有更简单的方法来基于gradle配置仅拥有一个文件或选择正确的文件? package_name
field in google-services.json
has the package name com.my.app.package.name
. 我看到google-services.json
的package_name
字段具有包名称com.my.app.package.name
。 Can I add multiple package names manually to work for all build variants? 我可以手动添加多个软件包名称以适用于所有构建版本吗? If yes, how to do that? 如果是,该怎么做? Could not find any instructions in documentations. 在文档中找不到任何说明。 参考:https://stackoom.com/question/2MocZ/找不到与包名称匹配的客户端-Google-Analytics-分析-多个productFlavors和buildTypes-关闭
Found this: 发现了这一点:
The google-services.json file is generally placed in the app/ directory, but as of version 2.0.0-alpha3 of the plugin support was added for build types , which would make the following directory structure valid: google-services.json文件通常放置在app /目录中, 但自版本2.0.0-alpha3起,已为构建类型添加了对插件的支持 ,这将使以下目录结构有效:
app/src/ main/google-services.json dogfood/google-services.json mytype1/google-services.json ...
Source 资源
Source 2 来源2
check if client_id
and package_name
in the google-services.json has a correct value according to your package name. 根据您的软件包名称检查google-services.json中的client_id
和package_name
是否具有正确的值。
You should add the mentioned file into the flavors directory with corresponding package name in the client_id
and package_name
field. 您应该在client_id
和package_name
字段中使用相应的包名称将提到的文件添加到flavors目录中。
Check your package name on your google-services.json it should be same with your local package name of your app 在google-services.json上检查您的软件包名称,该名称应与您的应用的本地软件包名称相同
Example 例
"client_info": {
"mobilesdk_app_id": "1:6596814400689:android:65d6f25f5006145",
"android_client_info": {
"package_name": "com.my.app.package.name"
}
In this case my local package name is com.my.app.package.name so also i have changed my package name in google-services.json with my local package name 在这种情况下,我的本地软件包名称是com.my.app.package.name,所以我也用本地软件包名称更改了google-services.json中的软件包名称
You need to place google-services.json
into app/
dir. 您需要将google-services.json
放入app/
目录中。 And for each build type, there should be accordant director in app/src
folder. 对于每种构建类型, app/src
文件夹中都应该有一致的Director。
For example, if you have release and debug: 例如,如果您具有发布和调试功能:
app/google-services.json
app/src/debug/google-services.json
In all google-services.json files you should specify correct package_name
according to build type. 在所有google-services.json文件中,您应该根据构建类型指定正确的package_name
。
For example, inside debug dir it should be like {com.myapp}.debug
例如,在debug dir中,它应类似于{com.myapp}.debug
I solved it by making two sourcesets , one free and one paid. 我通过制作两个资源集解决了这个问题,一个是免费的,一个是付费的。 Both of these folders will contain required java code and resource files, which will be edited to the requirements of the particular flavor. 这两个文件夹都将包含必需的Java代码和资源文件,将根据特定风味的要求对其进行编辑。 For example, You would like to remove AdMob Code in the Paid both from Java Classes and Layout Files. 例如,您想从Java类和布局文件中删除付费中的AdMob代码。