包名不匹配 (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个回答

4
如果以上方法对你们中的某一个人都没有起作用,我的问题可能是由于包名不以“com”开头。 我改变了它,现在它可以工作了。 希望这能有所帮助。

3
android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.package.name"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

请确保Gradle.app的applicationId与您的包名相同。我的问题就是这个,我是这样解决的。

3

请打开google-services.json文件,然后在客户端部分检查包名,将其与应用程序包名进行比较,如果不同,请根据您的应用程序包名更改客户端包名。最好祝你好运。

google-services.json文件 ->“package_name”:“com.example.application.tracker”

应用程序包名 -> 包“com.example.application.tracker”;


3

进入你的项目目录,在app/src路径下创建文件夹,以你的产品风味命名(例如Alpha、Beta、Store或任何你的风味名称)。然后将google-services.json文件复制到每个文件夹中。不要忘记在你的每个产品风味的google-services.json文件中更改“package_name”字段,该字段应与你的子文件夹相对应。


3
我通过重新同步文件google-services.json解决了同样的问题。

工具 > Firebase > 连接到Firebase > 同步


你在哪里做的?它确切地替换了什么?截图? - Nasenbaer
你可以在Android Studio中完成这个操作(必须启用Firebase插件)。它会更新google-services.json文件。 - Nabin Bhandari

2
你可以通过以下方法解决这个问题。

在此输入图片描述

最初的回答已经给出,你只需要按照上述步骤进行即可。

5
这将掩盖问题而非解决问题。请参考其他答案以获得解决方案。 - Vadim Kotov
请使用代码而不是截图,你的回答对我来说很好,因为我只想创建一个应用程序克隆的“模型”。 - user2078023
4
分享代码而不是截图会更有用。 - vipin agrahari

2

我通过创建两个源集来解决了这个问题,一个是免费的,一个是付费的。这两个文件夹都包含所需的Java代码和资源文件,将根据特定风格的要求进行编辑。例如,您想从Java类和布局文件中删除付费版本中的AdMob代码。


2

当我改变我的应用程序的包名时,也遇到了这个问题。

在您的Android Studio项目中找到“google-services.json”文件。打开它。并检查您的应用程序的包名是否与此文件中写的相同。

您的应用程序的包名和“google-services.json”文件中写的包名必须相同。


2
我在此为您提供简单的解决方案,希望能够解决同样的问题:当您创建firebase连接时,请遵循以下指南:
  • 在firebase中添加您的应用程序名称

  • 添加您的应用程序包名称(写入与应用程序中使用的相同的包名称)

  • 当firebase创建 google-services.json 文件时,只需将其下载粘贴到您的应用程序文件夹中

  • 同步您的项目,问题就解决了 :)

    谢谢!


1

我忘记在Firebase中添加SHA证书指纹。我只是重新导入了google-services.json,然后它就可以工作了。


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