【问题标题】:No matching client found for package name (Google Analytics) - multiple productFlavors & buildTypes找不到与包名称匹配的客户端 (Google Analytics) - 多个 productFlavors & buildTypes
【发布时间】:2021-10-08 16:11:17
【问题描述】:

上下文:

我正在尝试为我的应用设置 Google Analytics。 (有 4 个自定义 buildTypes 和多个 productFlavors

当我选择applicationId 设置为com.my.app.package.name(生成google-services.json 时使用的包名称)的Build Variant 时,它工作正常。但是,我的其他风格有不同的 applicationId。

我按照offical devguide进行设置。

Build Variants Tab 中选择任何其他构建变体时出现的错误(具有不同的applicationId(包名称)如下:

错误:任务执行失败 ':app:processAllcategoriesDebugfreeGoogleServices'。

找不到与包名称“com.my.app.package.name.debug”匹配的客户端

错误信息说明:

在上面错误消息中的任务名称Debugfree 是我的自定义buildTypeAllcategories 是我的productFlavors 之一。

我了解错误并且知道包名称与我在生成 json 时使用的名称不同,但这正是我想要解决的问题。

问题:

现在,google-services.json 位于 app 文件夹中,因此我无法通过将它们放入风味特定的源集文件夹中来为每种产品风味分离它们。

问题:

  1. 我自定义的byildType 用于调试.debugapplicationId(包名)的后缀。有没有办法让它与我的发行版applicationIdgoogle-services.json 一起工作(即没有后缀.debug
  2. 有没有办法在同一个google-services.json 文件中配置多个产品风格,而无需使用单独的文件和任务将所需文件复制到app 文件夹。我知道可以使用task 来完成,如this post 中所述。有没有一种更简单的方法来只拥有一个文件或根据 gradle 配置选择正确的文件?
  3. 我看到google-services.json 中的package_name 字段具有包名称com.my.app.package.name。我可以手动添加多个包名称以适用于所有构建变体吗?如果是,该怎么做?在文档中找不到任何说明。

【问题讨论】:

  • 您是否找到了特别针对您的第三个问题的解决方案?
  • 我也有类似的情况。我只需要对产品发布风味版本之一的分析支持。我可以 limit added dependency 到 prod-flavour 但它仍然会搜索正确的包作为子文件的一部分。任何建议!
  • 我也面临同样的问题,如果有人找到解决方案,请告诉我?
  • 就我而言,我只是更改了包名
  • 如果您在应用程序中使用 Firebase,然后将您的新 applicationId 添加为子应用程序(添加应用程序)问题将解决

标签: android android-studio gradle google-analytics android-productflavors


【解决方案1】:

找到这个:

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

【讨论】:

  • 有什么方法可以轻松禁用构建类型的分析?我想为调试禁用它?我认为如果我不添加 google-services 文件它会被禁用,但即使我禁用它,它仍然会要求提供 google-services 文件。
  • 每个 josn 文件在每种风味中添加的区别是什么??
  • 是否有可能在模块内使用谷歌服务(两个应用程序共享)......因为如果没有该包的谷歌服务文件,我什至无法进行 gradle-sync......嵌入应用程序应提供 json,但不提供模块。这有可能吗?
  • 当我将google-service.json 移动到名为staging 的新文件夹时,我收到了这个错误:File google-services.json is missing. The Google Services Plugin cannot function without it. 。我只需要用于分期的firebase,仍然 - 这并不能解决问题:(
【解决方案2】:

根据您的软件包名称检查 google-services.json 中的 client_idpackage_name 是否具有正确的值。

您应该将提到的文件添加到风味目录中,并在 client_idpackage_name 字段中使用相应的包名称。

【讨论】:

    【解决方案3】:

    在您的 google-services.json 上检查您的软件包名称,它应该与您应用的本地软件包名称相同

    示例

    "client_info": {
        "mobilesdk_app_id": "1:6596814400689:android:65d6f25f5006145",
        "android_client_info": {
          "package_name": "com.my.app.package.name"
        }
    

    在这种情况下,我的本地包名称是 com.my.app.package.name 所以我也用我的 google-services.json 更改了我的包名称本地包名

    【讨论】:

    • google-services.json 是一个文件!!!在应用程序目录中。应该在 Windows Explorer 的帮助下找到这个文件(例如)。应该用普通的编辑器编辑这个文件。
    • 要找到它,请转到 Android Studio 中的项目视图并在您的应用程序包中搜索
    • 不...我们都知道 google-services.json 在这个问题上是无效的...我们想要的是如何在构建变体的情况下解决这个问题!!
    • 如果您的活动位于子包中,例如:com.example.aaron.myproject22.Activities....您需要进入 google-services.json 并将 client_info 的 package_name 更改为 com。 example.aaron.myproject22 还要确保您在 build.grade (模块应用程序)的底部有 apply plugin:'com.google.gms.google-services'
    • 谢谢你为我工作@WHOATEMYNOODLES
    【解决方案4】:

    您需要将google-services.json 放入app/ 目录。并且对于每种构建类型,都应该有一致的导演 app/src 文件夹。

    例如,如果你有发布和调试:

    app/google-services.json
    app/src/debug/google-services.json
    

    在所有 google-services.json 文件中,您应该根据构建类型指定正确的 package_name

    例如,在调试目录内部应该是{com.myapp}.debug

    【讨论】:

    • 显然你甚至可以在"client"的数组中复制主集的元素(在元素之间添加一个逗号)并只更改"package_name"的新元素的值以包含.debug 后缀。然后重建。它在 AS 2.3.3 上对我有用。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      确保在重命名包后重命名 gradle 文件中的 ApplicationId

      【讨论】:

      • 救了我。谢谢。
      • 很高兴它帮助了某人
      • 也解决了我的问题!
      【解决方案7】:

      我找到了解决办法:

      我们必须在 firebase 项目中创建两个“应用程序”,然后我们可以从任何一个应用程序(我从风味应用程序下载)下载 json 文件。它将包含两个应用程序的数据。我们可以简单地将json文件复制到应用的根目录。

      来源:https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html

      【讨论】:

      • 这是最好的答案,因为一个 json 文件可以涵盖所有产品风格。无需创建其他源集。
      • 请注意,您必须在同一个项目中创建应用程序。左上角的项目概览有一个设置图标。按下它,它将打开常规选项卡,向下滚动并在您的应用程序部分下有一个按钮添加应用程序
      • 当您忘记更改您的 google-service.json 并将其推送到 prod 时,就会发生最大的问题。
      【解决方案8】:

      确保您在“google-services.json”文件中的包名与您应用的包名相同。

      【讨论】:

      • fork 新项目的 repo 时的常见问题。
      • 是的,如果两个包名不同,则它不起作用
      【解决方案9】:

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

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

      检查包是否与您的包名相同。我的不一样,所以我改变了它,它起作用了。

      【讨论】:

      • 工作:) 谢谢
      【解决方案10】:

      如果您在 Google-services.json 文件中的包名没问题, 转到 gradle.properties 文件。然后更改您的 APPLICATION_ID="com.yourpackage.name"

      【讨论】:

        【解决方案11】:

        如果这对你们中的任何一个都不起作用,我的问题是包名不是以“com”开头的。 改了,现在可以了。

        希望对你有帮助

        【讨论】:

          【解决方案12】:

          我来自 react native,但我认为这也适用于这个问题。指定。

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

          并确保该值与 this 相同

          client[0]client_info.android_client_info.package_name

          作为google-services.json中的值。

          【讨论】:

            【解决方案13】:

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

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

            【讨论】:

            • 你在哪里做的?它究竟取代了什么?截图?
            • 您可以在 Android Studio 中执行此操作(必须启用 Firebase 插件)。它更新文件google-services.json
            【解决方案14】:

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

            【讨论】:

              【解决方案15】:

              我解决了同样的问题 这是简单的解决方案: 当您创建 firebase 连接时,请遵循以下准则:

              • 在 firebase 中添加您的应用程序名称

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

              • 当 firebase 制作 google-services.json 文件时,只需 下载 并将其 粘贴 到您的应用文件夹中

              • 同步你的项目问题解决了:)

                谢谢

              【讨论】:

                【解决方案16】:

                这意味着您的 google-services.json 文件不属于您的应用程序(您是否为另一个应用程序下载了 google-services.json?)...所以要解决此问题,请执行以下操作:

                1:登录 Firebase 并打开您的项目。 2:单击设置图标并选择项目设置。 3:在您的应用程序卡中,从列表中选择您需要配置文件的应用程序的包名称。 4:点击google-services.json。 下载完成后,将新的 google-services.json 添加到您的项目根文件夹,替换现有的..或删除旧的。 为您的第一个项目下载 google-services.json 然后假设或忘记这个特定的 google-services.json 是为您当前的项目量身定制的,因为不是任何其他项目,因为所有项目都有一个唯一的包名称,这是非常正常的。

                【讨论】:

                  【解决方案17】:

                  转到 google-services.json 文件并在客户端部分检查包名称并将其与应用包名称进行比较(如果它们不同),然后根据您的应用包名称更改客户端包名称,祝我好运。 .

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

                  应用包名->package "com.example.application.tracker";

                  【讨论】:

                    【解决方案18】:

                    我认为您已在新文件中添加了 firebase json 文件“google-services”.json。确保创建一个新文件check the link on how to create json file from firebase,它应该与你的包名匹配

                    第二件事是,如果您要更改包名称,请在从下拉菜单中选择项目时右键单击文件下的“路径替换”选项。你必须在整个项目中搜索包名并替换它!

                    希望这会有所帮助!

                    【讨论】:

                      【解决方案19】:

                      您还需要在 google-services.json

                      中更改包名称

                      【讨论】:

                        【解决方案20】:

                        很简单。从 Android Studio 退出,完全关闭它。重新打开 Android Studio,然后再次登录 Android Studio。

                        然后尝试从 Android Studio IDE 连接到 Firebase。这个过程对我有用。

                        【讨论】:

                        • 如果 google-services.json 存在,这将不起作用。如果存在,我们必须删除 google-services.json。
                        • 这将在您更改 json 文件中的包名称后以及保存之前运行一次,您需要关闭 android studio,然后保存 json 文件并重新启动 studio。
                        【解决方案21】:

                        当我更改应用程序的包名称时,我也会遇到此问题。

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

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

                        【讨论】:

                          【解决方案22】:

                          每当您创建或更新package name 时,请确保您的包名完全相同[大小写很重要]

                          执行以下步骤。

                          1).在应用级gradle文件中检查applicationId

                          2).在您的google-services.json 文件中检查package_name

                          3).在您的AndroidManifest 文件中检查package

                          为了完全确认,请确保您的工作包目录名称 i.e.("com.example.app") 也是相同的。

                          编辑[在productFlavour 场景中遇到此问题的任何人,请查看Droid Chris's Solution]

                          【讨论】:

                          • 谢谢兄弟,它对我有用。在应用程序级别的 gradle 文件中,我的包不同。当我改变它对我有用
                          • 欢迎@fazil
                          • 您不必更改清单中的package(以及所有包中的所有文件),因为applicationId 将更改应用程序ID。
                          • 作者问的不是这个
                          【解决方案23】:
                          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 与您的包名称相同。我的问题是这样的,我用这种方式解决了

                          【讨论】:

                            【解决方案24】:

                            解决这个问题很简单:只需确保 app/build.gradle 文件中的包名称与 App Manifest 文件中的包名称相同。并确保包名正确。这应该可以解决这个问题

                            【讨论】:

                              【解决方案25】:

                              首先,在 Gradle 中为应用程序包添加后缀:

                              yourFlavor {
                                 applicationIdSuffix "yourFlavor"
                              }
                              

                              这将导致你的包被命名

                              com.domain.yourapp.yourFlavor
                              

                              然后转到您当前项目下的 Firebase,并使用此包名称向其中添加另一个 android 应用程序。

                              然后将现有的 google-services.json 文件替换为您生成的新文件,其中包含新应用程序。

                              然后你会得到一个包含多个“client_info”部分的东西。所以你应该得到这样的结果:

                              "client_info": {
                                  "mobilesdk_app_id": "YOUR APP INFO",
                                  "android_client_info": {
                                    "package_name": "com.domain.yourapp"
                                  }
                                }
                              
                              "client_info": {
                                  "mobilesdk_app_id": "YOUR APP INFO - will be different then other app info",
                                  "android_client_info": {
                                    "package_name": "com.domain.yourapp.yourFlavor"
                                  }
                                }
                              

                              【讨论】:

                              • 这是正确答案!您需要 google-services.json 文件中的两个应用程序 (id)。
                              • 就是这样。 +1,这里有一些与此问题相关的old discussion
                              • 简单直接。
                              • 这应该被标记为关于构建变体的正确答案
                              • 即使我在这里回答了这个问题 [stackoverflow.com/a/50906585/4696610],但对于productFlavour 场景,这是最好的解决方案,我一定会在我的答案中链接你的答案以帮助未来的开发人员,谢谢+1
                              【解决方案26】:

                              找不到与包名称“com.tf”匹配的客户端 我很确定 google-services.json 中的“package_name”与您在 app gradle 中的“applicationId”不匹配。

                              应用分级:

                              defaultConfig {
                                      applicationId "com.tf" //replace with the package_name in google-services.json =
                                      minSdkVersion 23
                                      targetSdkVersion 26
                                      versionCode 7
                                      versionName "1.0"
                                      testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
                                  }
                              

                              google-services.json

                              "client_info": {
                                      "mobilesdk_app_id": "1:23978655351:android:2b2fece6b961cc70",
                                      "android_client_info": {
                                        "package_name": "in.ac.geu.debug"
                                      }
                                    },
                              

                              解决方案:确保package_nameapplicationId 必须相同。

                              【讨论】:

                              • 作者正在询问解决此问题的方法。他们有不同的构建类型和不同的 applicationId
                              • 你已经给出了最有效的解决方案。赞一个!!
                              • app gradle 中的application id 做到了
                              • 这是正确答案。只需确保 package_name = applicationId。就我而言,我创建了一个具有新名称 (A) 的新项目,并从名为 (B) 的旧项目中复制旧代码。在项目B中,package_name是我在firebase控制台上选择的名称,但没关系,我们不需要匹配我们在SDK安装说明中设置的名称。
                              【解决方案27】:

                              在应用的 build.gradle 文件中检查 applicationIdSuffix。查看它是否将任何文本连接到您的applicationId。如果是这样,请将其删除。

                              【讨论】:

                                【解决方案28】:

                                1.验证包名应用ID是否一致

                                2.验证 google-services.json 包名在应用文件夹中是否可用

                                【讨论】:

                                • 我也必须Invalidate Caches / Restart... 才能正常工作。
                                【解决方案29】:

                                当您在项目中下载的 Google Services Json 文件的包名称与您项目的包名称不匹配时,会发生此错误。

                                最近重命名了项目的包名?

                                它确实更新了所有类但不更新 Gradle 文件。所以检查你的包名在你的 Gradle 中是否正确,也可能是 Manifest。

                                【讨论】:

                                  【解决方案30】:

                                  你可以这样做来解决这个问题。

                                  【讨论】:

                                  • 这将掩盖问题而不是解决问题。查看其他答案以获取解决方案。
                                  • 请使用代码而不是屏幕截图,您的回答对我来说很好,因为我只想创建应用程序克隆的“模型”。
                                  • 分享代码而不是截图会更有用。
                                  猜你喜欢
                                  • 2018-11-23
                                  • 2019-06-19
                                  • 1970-01-01
                                  • 2020-10-19
                                  • 2018-06-14
                                  • 2019-01-13
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多