包名不匹配 (Google Analytics) - 多个 productFlavors 和 buildTypes 中找不到相应的客户端

642
背景信息:我正在尝试为我的应用程序设置Google Analytics(拥有4个自定义`buildTypes`和多个`productFlavors`)。
当我选择`Build Variant`时,将`applicationId`设置为`com.my.app.package.name`(生成`google-services.json`时使用的包名),它可以正常工作。但是,我的其他flavor具有不同的applicationIds。
我遵循官方开发指南进行设置。如下是当选择任何其他构建变体时(具有不同的applicationId(包名称))在“Build Variants”选项卡中获得的错误:
错误::app:processAllcategoriesDebugfreeGoogleServices的执行失败。 无法找到与包名称'com.my.app.package.name.debug'匹配的客户端。
该错误指出`Debugfree`是自定义的`buildType`,而`Allcategories`是其中一个`productFlavors`。
问题: 现在,`google-services.json`位于`app`文件夹中,因此我不能通过将其放入特定于flavor的源集文件夹中来将它们分离出来。
问题: 1. 我的调试自定义`byildType`会将`.debug`后缀添加到`applicationId`(包名)。是否有一种方法可以使它与具有我的发布`applicationId`(即没有后缀`.debug`)的`google-services.json`文件一起使用? 2. 是否有一种方法将多个产品风味配置在同一个`google-services.json`文件中,而不使用单独的文件和任务来复制所需的文件到`app`文件夹中?我知道可以使用任务来完成这一点,如此帖子中所述。是否有更简单的方法只使用一个文件或根据Gradle配置选择正确的文件? 3. 我看到`google-services.json`中的`package_name`字段具有包名`com.my.app.package.name`。我是否可以手动添加多个包名以适用于所有构建变体?如果可以,如何操作?文档中没有找到任何说明。

1
你有没有找到特别针对你第三个问题的解决方案? - Mate
我也遇到了类似的情况。我只需要针对其中一个产品发布版本进行分析支持。我已经成功地限制了添加依赖项到产品版本,但它仍然在son文件的一部分中搜索正确的软件包。有什么建议吗? - CoDe
1
我也遇到了同样的问题,请知道有人找到解决方法吗? - Deepanshu Sinha
在我的情况下,我只是更改了包名。 - larsaars
如果您在应用程序中使用Firebase,则将新的applicationId作为子应用程序(添加应用程序)添加,问题将得到解决。 - Mohd Qasim
35个回答

26

检查 client_idpackage_name 是否在 google-services.json 中根据你的包名有正确的值。

你应该将提到的文件添加到口味目录中,并在 client_idpackage_name 字段中加入相应的包名。


21

如果有人更改其现有的包名称,则有时会出现问题,因此您应该更改本地软件包名称、build.gradle文件的软件包名称,如果您的项目有任何google-services.json文件,则只需更改JSON文件的软件包名称即可。

旧文件看起来是这样的

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:517104510151:android:8b7ed3989db24a6f928ae2",
    "android_client_info": {
      "package_name": "com.techsajib.oldapp"
    }
  },

新文件长这样

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:517104510151:android:8b7ed3989db24a6f928ae2",
    "android_client_info": {
      "package_name": "com.techsajib.newapp"
    }
  },

注意: 有时JSON文件会有几个包名称,因此需要更改所有这些名称。


21

在我的情况下,我忘记将google-services.json放置于应用根目录,而该文件是为不同flavor准备的。它被默认使用,而不是使用存储在flavor文件夹中的json文件。这导致插件出现问题,因为包名不匹配,从而失败。

我教给你的智慧是,在出现此问题时,请检查项目结构中所有的google-services.json文件。


20
请确保在重命名包名后,在gradle文件中也将ApplicationId重命名。

2
救了我。谢谢。 - VipulKumar
很高兴它帮助了某个人。 - Syed Arsalan Shah
问题解决了! - Kanagalingam

17

打开您的Google-services.json文件,并查找文件中的此部分:

"client": [
{
  "client_info": {
    "mobilesdk_app_id": "1:857242555489:android:46d8562d82407b11",
    "android_client_info": {
      "package_name": "com.example.duke_davis.project"
    }
  }

检查软件包名称是否与您的软件包名称相同。我的软件包名称不同,所以我更改了它,然后它就可以工作了。


工作了 :) - Shujat Munawar

12
只需两个简单的步骤即可更改包名:
  1. 打开 "build.gradle" 文件 enter image description here

  2. 然后在 "applicationId" 中添加新的包名,现在点击 "sync now" 同步项目。

enter image description here

注意: 如果您的 "google-services.json" 文件已添加到项目中,则在"client_info"中更改名称包名称。

enter image description here

"google-services.json" 中的包名

enter image description here

就这样。无需在其他地方更改包名。


11

我来自 React Native,但我认为这也适用于这个问题。具体来说,

在文件 android/app/build.gradle 中搜索 applicationId(在 androiddefaultConfig 中),

确保该值与 google-services.json 中的 client[0]client_info.android_client_info.package_name 相同。


10

您还需要在 google-services.json 文件中更改包名。


8
如果你在 Google-services.json 文件中的包名没问题,就去 gradle.properties 文件中修改 APPLICATION_ID="com.yourpackage.name"。

6
我认为您已经添加了新的firebase json文件“google-services”.json。请确保创建一个新文件,请参考从Firebase创建Json文件的链接,并且它应与您的包名称匹配。
第二件事是,如果您正在更改软件包名称,请使用“路径替换”选项,在右键单击文件时选择项目,然后从下拉列表中选择。您必须在整个项目中搜索软件包名称并将其替换!
希望这可以帮助您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接